2016-04-06 18 views
-1

Meine Abfrage ist, jedes Element in der Liste mit dem Schlüssel des Wörterbuchs zu vergleichen und seinen Wert abzurufen.Listen und Wörterbuch in Python vergleichen

Code:

for each_element in list1: 
    for key,value in my_dictionary.items(): 
     if each_element == key: 
      output = value 

Der Fehler Ich bin vor ist das Element aus der Liste ist:

list element: ['a','b'] 
key from dictionary: 'a,b' 

die passende nicht. Gibt es eine Möglichkeit, dies zu tun?

+1

Ersten Schnipsel ist kein gültiger Python-Code ... Und 'a, b == [ "a", "b"]' ist falsch, warum sollte es übereinstimmen? String kann nie gleich Liste sein, warum sollte es sein? 'a, b == ','. join (['a', 'b'])' mag stimmen, aber da du diese Konvertierung nicht selbst machst, warum sollte Python das erraten, was du willst? –

+0

@Rogalski, eigentlich ist es ein Python-Code, aber ein Test-Snippet und könnten Sie erklären, was ich falsch mache falsch machen –

+0

Ich habe keine Ahnung, warum Sie eine Schleife verwenden, um Elemente in einem Wörterbuch nachschlagen. Vielleicht konsultieren Sie [die Dokumentation] (https://docs.python.org/3/tutorial/datastructures.html#dictionaries)? – nneonneo

Antwort

-1

Angenommen, Ihre Liste [["a","b"],..] und Wörterbuch ist sein {"a,b":val1,...}

out = (my_dict.get(",".join(item)) for item in my_list) 
# out := [val1, val2, None, None, val3..], None for non-existent keys 
# to weed out None vals 
out2 = (item for item in out if item) 
# and finally, consume the iterator 
output = list(out2) 
+0

@Signal Können Sie die Down-Abstimmung erklären? –

1

geben Anprobe außer einem Schuss und Bypass irgendwelche Diskrepanzen, ohne einen Fehler zu erzeugen. Verwenden Sie die Suchfunktionalität von Wörterbüchern - myDictionary [KeyToSearchFor] gibt den Wert aus, falls vorhanden.

L = ['a','b','c','d','e','f'] 
D = {'a':10,'b':20,'c':30,'d':40,'z':50,'f':60, 'g':70} 

for i in L: 
    try: 
     print("key: {}/value: {}".format(i,D[i])) 
    except KeyError: 
     continue 

Ausgang, bemerkt keine Übereinstimmung auf 'e'

key: a/value: 10 
key: b/value: 20 
key: c/value: 30 
key: d/value: 40 
key: f/value: 60 
+0

Hinweis - Es ist im Allgemeinen keine gute Idee, eine generische 'except'-Anweisung zu haben, da sie andere Probleme im Code überdecken kann. – MANA624

+0

Ich stimme zu, aber Sie könnten es sicherlich erweitern, so dass es andere Probleme nicht maskiert. Aber ja ... Sie sind 100% richtig, Sir – bvmcode

Verwandte Themen