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

在Python中,如何将列表中的一个值与列表中的另一个值进行比较,python,list,Python,List,我对python非常陌生,但我正在尝试比较Python2.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]] 仅当第一个值与

我对python非常陌生,但我正在尝试比较Python2.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])

非常感谢

您可以使用字典理解功能将
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]]
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]]
更简单的是,字典可以用
dict
函数构建,如下所示

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]]
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]]
如果您想使用基本但低效的方法,那么您可以这样做

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

您可以使用字典理解功能将
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]]
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]]
更简单的是,字典可以用
dict
函数构建,如下所示

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]]
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]]
如果您想使用基本但低效的方法,那么您可以这样做

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

它有用吗?请正确缩进您的代码。此外,这些比较值在
reflist
中是否保证唯一?是的,比较值是唯一的,是否有效?请正确缩进代码。此外,这些比较值是否保证在
reflist
中唯一?是的,比较值是唯一的ID