2014-03-31 172 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)]] 
相关问题