2017-10-31 4 views
-2

ein Wörterbuch Gegeben,Wörterbuch mit Listen als Wert

dict={"1":"2" , "2":"4"} 

Ist es möglich, ein anderes Wörterbuch zu erstellen, die als Werte, die Listen der Werte des ersten Wörterbuch hat?

Zum Beispiel in diesem Fall ist der Ausgang

dictionary={"1":["4","2"],"2":["4"]} 

, weil in der ersten dict „1“ ist der Schlüssel von „2“, die Taste „4“ zur gleichen Zeit ist. So haben wir das neue Wörterbuch.

"1":["4","2"] 

Während "2" Schlüssel 4 ist, ist, dass kein Schlüssel eines anderen Wert.

Wie kann ich das umsetzen?

+6

Wie haben Sie * versucht * zu schreiben es, und was genau ist das Problem? – jonrsharpe

+0

Diese Frage ist ein wenig verwirrend, weil Sie anscheinend synchrone Zeichenfolgen und numerische Werte verwenden (eine Zahl mit Anführungszeichen ist eine Zeichenfolge). In diesem Fall wird es die Antwort nicht dramatisch beeinflussen, kaufen Sie sollten entscheiden, ob Sie '1 'oder' "1" wollen, und fragen Sie speziell danach. –

+0

Ja, das ist möglich. Haben Sie Rekursion versucht? – bendl

Antwort

0

Versuche Dies ist eine schlechte Frage, also werde ich Ihnen nur einen Startpunkt geben.

dict1={"1":"2" , "2":"4", "4": "3"} 

def list_maker(dictionary, key, list): 
    if key not in dictionary: 
     return [key] + list[:-1] 
    else: 
     return list_maker(dictionary, dictionary[key], [key] + list) 

print(list_maker(dict1, "1", [])) 

Sehen Sie, was das gibt Ihnen und arbeiten von dort

+0

Warum entfernen Sie das letzte Element der Liste? Wenn Sie überprüfen, ob der Schlüssel in der Liste enthalten ist, werden Endlosschleifen vermieden. Es scheint mir, dass dies mit einer while-Schleife erledigt werden könnte. Wäre das nicht effizienter? – Acccumulation

+0

Ich entferne das letzte Element der Liste, weil es das ursprüngliche "Schlüssel" -Argument war und nicht in der Liste erscheinen sollte. Ich bin mir ziemlich sicher, dass es mit einer while-Schleife recht einfach möglich wäre. Ich benutzte Rekursion, weil das für mich am offensichtlichsten war – bendl

0

diesen

>>> dict1={"1":"2" , "2":"4"} 
>>> for i in dict1.keys(): 
    appendvalue=[dict1.get(i)] 
    if dict1.get(i) in dict1.keys(): 
     appendvalue.append(dict1.get(dict1.get(i))) 
    dict1[i]=appendvalue 


>>> dict1 
{'1': ['2', '4'], '2': ['4']} 
>>> 
+0

Dies funktioniert nicht, wenn mehr als zwei Schlüssel und Werte verkettet sind. – bendl

+0

Können Sie ein Beispiel geben? für '{" 1 ":" 2 "," 2 ":" 4 "," 4 ":" 5 "," 5 ":" 6 "}' es hat funktioniert –

+0

Wenn ich die Frage richtig verstanden habe, für das Beispiel Sie geben Sie die Ausgabe sollte "{'1": [' 6 ',' 5 ',' 4 ',' 2 '],' 2 ': [' 6 ',' 5 ',' 4 '],' 4 ' : ['6', '5'], '5': ['6']} 'und nicht '{' 1 ': [' 2 ',' 4 '],' 2 ': [' 4 ',' 5 '],' 4 ': [' 5 ',' 6 '],' 5 ': [' 6 ']} '. Ich könnte mich allerdings irren. Ich habe nicht daran gedacht, dass dies möglicherweise das ist, was er fragt. – bendl

0

Sie so etwas wie dies versuchen:

dict={"1":"2" , "2":"4"} 
final_dict={} 
for index,item in dict.items(): 
    final_dict[index]=[item] 
    if item in dict.keys(): 
     final_dict[index].extend([dict[item]]) 
print(final_dict) 

Ausgang:

{'2': ['4'], '1': ['2', '4']} 
Verwandte Themen