2016-09-23 5 views
1

私は辞書のキーを表すリストのリストを持っています。リスト内の各リストの小さなキーをピックアップしたい。例えば、私はそれを印刷するときリストと辞書のリストを操作する

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" 

、私が手に:それらの両方は、それぞれ1_A1_Bに比べて小さい値を持っているので

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 

私は期待して出力が2_A2_Bです。誰もこれを行う方法を提案することはできますか?

答えて

2

どこでも値を比較しているわけではありません。

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

こんにちは、L1〜のi、jは要素が2つの場合にのみ動作します。 – Arun

+0

L1のより多くの変数を説明するために、以下のことを行いました:L1のiの場合: iのkの場合: print( "値のk:"、k)lの場合は のlの場合:l!= k : print( "Value of l:"、l)〜しかし、エラーが出ます。アンパックする値が多すぎます。出力は、kに対して1つの値を示し、lに対して2つの他の値を示す。あなたの提案をお願いしますか? – Arun

0

もう一度簡単な答えが見つかりました。

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']" 

リスト内包バージョン:

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

ありがとう!

+0

これは、リストのリストの各要素の異なるlenにも当てはまります。 – Arun