2016-09-23 2 views
1

Ich habe eine Liste von Listen, die die Schlüssel in einem Wörterbuch darstellen. Ich möchte den kleineren Schlüssel für jede Liste in Listen abholen. Zum BeispielListe der Listen und des Wörterbuchs bearbeiten

L1 = [['1_A','2_A'],['1_B','2_B']] 
D1 = {'1_A': 0.22876, '2_A': 0.22382, '1_B': 0.2584, '2_B': 0.25373} 

for li in L1: 
    for ll in li: 
     if ll in D1.keys(): 
      print "Value for %s is %s" %(ll,D1[ll]) 
     else: 
      print "Values not found" 

Als ich es drucken, erhalte ich:

Value for 1_A is 0.22876 
Value for 2_A is 0.22382 
Value for 1_B is 0.2584 
Value for 2_B is 0.25373 

Der Ausgang erwarte ich ist 2_A, 2_B da beide kleinere Werte haben im Vergleich zu 1_A und 1_B sind. Kann jemand vorschlagen, wie man das macht?

Antwort

2

Sie vergleichen die Werte nicht irgendwo.

L1 = [['1_A','2_A'],['1_B','2_B']] 
D1 = {'1_A': 0.22876, '2_A': 0.22382, '1_B': 0.2584, '2_B': 0.25373} 

template = "Value for {} is {}" 

for i,j in L1: 
    if D1[i] < D1[j]: 
     print template.format(i,D1[i]) 
    else: 
     print template.format(j,D1[j]) 
+0

Hallo, ~ für i, j in L1 ~ funktioniert nur, wenn das Element zwei Mitglieder hat. – Arun

+0

Um mehr Variablen in L1 zu berücksichtigen, habe ich Folgendes getan: ~ für i in L1: für k in i: drucken ("Wert von k:", k) für l in i: wenn l! = K : print ("Wert von l:", l) ~ Aber ich bekomme den Fehler, zu viele Werte zu entpacken. Die Ausgabe zeigt einen Wert für k und zwei weitere Werte für l. Können Sie bitte Ihren Vorschlag geben? – Arun

0

Ich fand eine andere einfache Antwort!

L1 = [['1_A','2_A'],['1_B','2_B']] 
D1 = {'1_A': 0.22876, '2_A': 0.22382, '1_B': 0.2584, '2_B': 0.25373} 

for i in L1: 
    val = (sorted(i, key=D1.get))[0] 
    newlist.append(val) 

"newlist = ['2_A', '2_B']" 

Eine Liste Verständnis Version:

newlist = [sorted(i,key=D1.get)[0] for i in L1] 

Dank!

+0

Vergessen zu erwähnen, dass dies auch für verschiedene len jedes Elements in der Liste der Listen funktioniert! – Arun

Verwandte Themen