【问题标题】:Comparing list of lists with dictionary将列表列表与字典进行比较
【发布时间】:2014-03-31 21:58:13
【问题描述】:

您好,请问我如何将点中的元素与 pos 中的键进行比较并打印 pos[values] 即匹配的元组。谢谢你

我试过了

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

【问题讨论】:

  • 我不明白你应该比较什么。这些值应该如何关联?
  • 你能提供预期的输出吗?

标签: python-2.7


【解决方案1】:

试试这个。您在代码的最后一行使用了未定义的 key。

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, 6), (4, 3), (9, 0)], [ (0, 28), (7, 5)]] 表示第一个列表中有 3 个项目以点匹配,而第二个只有两个,我该怎么做
【解决方案2】:
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, 6), (4, 3), (9, 0)], [ (0, 28), (7, 5)]] 表示第一个列表中有 3 个项目以点匹配,而第二个只有两个,我该怎么做
【解决方案3】:
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)

// 打印(l)

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

【讨论】:

  • 希望对您有所帮助。
  • 这就是你要找的吗??
【解决方案4】:

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

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)]]

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多