2014-03-31 65 views
0

嗨,請問我如何比較點中的元素與pos中的鍵並打印pos [值],即匹配那些匹配的元組。謝謝將列表與字典進行比較

我想這

dots = [[1,2,73,4],[5,36,7,18]] 
pos = {1:(0,6), 2:(4,3),3:(7,5),4:(9,0), 5:(0,28), 6:(4,3),7:(7,5),8:(9,0)} 

dot_pos = [] 
for k in dots: 
    for item in k: 
     if item in pos: 
      dot_pos.append(pos[key]) 

,並得到這個錯誤:

ValueError: too many values to unpack 

只是一個更新,請

怎麼能我解決這個得到的輸出是這樣的:

[[(0, 6), (4, 3), (9, 0)],[ (0, 28), (7, 5]] 
+0

我不明白你應該比較什麼。價值觀應該如何相關? – Broseph

+0

你能提供預期的產出嗎? –

回答

1

試試這個。您正在代碼的最後一行使用鍵,這是未定義的。

dots = [[1,2,73,4],[5,36,7,18]] 
pos = {1:(0,6), 2:(4,3),3:(7,5),4:(9,0), 5:(0,28), 6:(4,3),7:(7,5),8:(9,0)} 

dot_pos = [] 
for k in dots: 
    for item in k: 
     if item in pos: 
      dot_pos.append(pos[item]) 

對於在評論你的第二個問題,這應該工作:

dot_pos = [] 
for k in dots: 
    dot_new = [] 
    for item in k: 
     if item in pos: 
      dot_new.append(pos[item]) #Append the matches to a new list 
    dot_pos.append(dot_new)   
+0

感謝您以前的幫助,如果我需要返回列表內的那些元組,即輸出將是[[(0,6),(4,3),(9,0)],[(0,28),( 7,5)]]表示3個項目與第一個列表中的點匹配,第二個中只有兩個匹配,那麼我該怎麼做 – Nobi

+0

@Nobi - 查看此更新後的答案。 – Amit

1
for i in dots: 

    for item in i: 

     if(item in pos.keys()): 

      print(pos[item]) 

答: (0,6) (4,3) (9,0) ( 0,28) (7,5)

+0

感謝您以前的幫助,如果我需要返回列表中的那些元組,即輸出將是[[(0,6),(4,3),(9,0)],[(0,28),( 7,5)]]表示3個項目與第一個列表中的點匹配,第二個中只有兩個,我該怎麼做 – Nobi

1
l=list(); 
for i in dots: 
    a=[]; // one list per element (which is list) in dots 
    for item in i: 
     if item in pos.keys(): 
      a.append(pos[item]); 
    l.append(a) 

// print(l)

// [[(0,6),(4,3),(9,0)],[(0,28),(7,5)]]

+0

希望這可以幫助你。 –

+0

這是你在找什麼? –

1

請注意,可以直接使用理解提取分數。例如,如果您有:

In [44]: pos = {1:(0,6), 2:(4,3),3:(7,5),4:(9,0), 5:(0,28), 6:(4,3),7:(7,5),8:(9,0)} 
In [45]: dots1 = [1,2,73,4] 
In [46]: [pos[dot] for dot in dots1 if dot in pos.keys()] 
Out[46]: [(0, 6), (4, 3), (9, 0)] 

因此,如果你有一個臨時的函數,它是:

In [49]: def f(dots1): return [pos[dot] for dot in dots1 if dot in pos.keys()] 

然後,你可以映射功能點......

In [50]: f(dots1) 
Out[50]: [(0, 6), (4, 3), (9, 0)] 
In [51]: dots = [[1,2,73,4],[5,36,7,18]] 
In [52]: map(f, dots) 
Out[52]: [[(0, 6), (4, 3), (9, 0)], [(0, 28), (7, 5)]]