如何将列表列表中的一个值与Python中列表列表中的另一个值进行比较

时间:2014-03-28 11:45:22

标签: python list

我对python很新,但我试图比较Python 2.7中的两个列表列表。

testlist = [['asd', 7],['bla', 5],['hi', 3]]
reflist =  [[1, 576 ],[2, 832],[3, 123],[4, 412],[5, 948],[6, 14],[7, 2],[8, 76],[9, 79]]

所以期望的输出是这样的:

testlist = [['asd', 7, 2],['bla', 5, 948],['hi', 3, 123]]

只有当第一个值与testlist中每个列表的第二个值匹配时,才在reflist中附加每个列表的第二个值...可能是这样的吗?

for l in testlist:
    if l[1] in b[0] for b in reflist:
        l.append(b[1])

非常感谢!

1 个答案:

答案 0 :(得分:4)

您可以使用字典理解转换reflist字典,并且查找将更容易,更快,就像这样

d = {item1:item2 for item1, item2 in reflist}
print [item + [d.get(item[1])] for item in testlist]
# [['asd', 7, 2], ['bla', 5, 948], ['hi', 3, 123]]

更简单的是,字典可以使用dict函数构建,就像这样

d = dict(reflist)

如果你想使用基本但效率低下的方法,那么就可以这样做

for item in testlist:
    for number1, number2 in reflist:
        if number1 == item[1]:
            item.append(number2)
            break

print testlist
# [['asd', 7, 2], ['bla', 5, 948], ['hi', 3, 123]]

这会就地更改列表。如果您不想这样做,可以

result = []
for item in testlist:
    temp = item[:]
    for number1, number2 in reflist:
        if number1 == item[1]:
            temp.append(number2)
            result.append(temp)
            break
    else:
        result.append(temp)

print result
# [['asd', 7, 2], ['bla', 5, 948], ['hi', 3, 123]]