2016-12-02 5 views
0

enthält Ich habe ein Wörterbuch, das wie folgt aussieht:eine Kantenliste aus einem Wörterbuch zu machen, die ein anderes Wörterbuch

{ 
    a: {a, b, c}, 
    b: {a, b, c}, 
    ... 
} 

Wesentlichen ein Wörterbuch mit Schlüssel und Werte und die Werte selbst sind in einem anderen Wörterbuch.

Wie würde ich gemacht, um die Schlüssel und Werte in eine Kantenliste

ich jede Kante wie sein wollen:

(a, a), (a, b), (a, c), (b, a), (b, b), (b, c) 

Für jeden Schlüssel im Wörterbuch, ist es die Kanten verbunden seine Werte sind im Wörterbuch.

Danke.

+0

a, b und c sind Zahlen oder welcher Datentyp? – lmiguelvargasf

+0

sie sind Strings –

+0

Sie wissen, dass in Ihrem Haupt '{a, b, c}' ist ein Satz? – lmiguelvargasf

Antwort

0
a, b, c = ('a', 'b', 'c') 
main = {a: {a, b, c}, b: {a, b, c}} 

output = [] 

# loop through the keys of the dictionary 
for key in main: 
    # iterate through set 
    for i in main[key]: 
     output.append((key, i)) 

print(output) 
>>> [('a', 'a'), ('a', 'c'), ('a', 'b'), ('b', 'a'), ('b', 'c'), ('b', 'b')] 
+0

dies funktioniert, glaube ich, danke! –

+1

Anstelle von 'value' sollten Sie' key' schreiben, da Sie das eigentlich in 'main' iterieren. – pylang

+1

@pylang Tku, das behoben –

0

Betrachtet man ein Wörterbuch und den Wert für jede Taste ist ein Satz, den Sie dies versuchen:

a = 'a' 
b = 'b' 
c = 'c' 


x = { 
    a: {a, b, c}, 
    b: {a, b, c}, 
} 

for key in x: 
    for value in x[key]: 
     print("(" + key + ", " + value + ")", end=" ") 

jedoch die Reihenfolge, die Sie benötigen nicht genau da Wörterbücher gleich sein könnten und Sätze sind nicht sortiert Datenstrukturen. Wenn um ankommt, können Sie den folgenden Code verwenden:

a, b, c = 'a', 'b', 'c' 

x = { 
    a: {a, b, c}, 
    b: {a, b, c}, 
} 

y = [] 

for key in sorted(x): 
    for value in sorted(x[key]): 
     y.append((key, value)) 

print(y) 

ich wirklich hoffe, das hilft.

0

Während es mir nicht klar, die genauen Rand Fällen Sie suchen, als Alternative zu @ double_j Ergebnis, können Sie eine itertools.product auf den Schlüssel und Werte durchzuführen.

import itertools as it 

list(it.product(main.keys(), set.union(*main.values()))) 
# [('a', 'a'), ('a', 'c'), ('a', 'b'), ('b', 'a'), ('b', 'c'), ('b', 'b')] 

Dieser Ansatz findet die Cartesian product von zwei Iterables: 1) die Tasten und 2) eine Reihe von eindeutigen Werten im main Wörterbuch.

Verwandte Themen