Python 将列表列表用作查找表并更新新列表中的值

Python 将列表列表用作查找表并更新新列表中的值,python,list,Python,List,我有一个创建列表列表的应用程序。列表中的第二个元素需要使用lookup list进行分配,lookup list也由列表列表组成 我使用了“all”方法来匹配列表中的值。如果查找列表中存在该列表值,则应更新新列表中的第二个位置元素。但事实并非如此。==比较值为所有元素生成错误匹配,即使它们都存在于两个列表中 我还尝试了索引查找命令的各种组合,但它们无法解压缩每个列表的值 我的代码如下。目标是用lookupList中的数字替换newData中的“xxx”值 lookupList= [['Garry

我有一个创建列表列表的应用程序。列表中的第二个元素需要使用lookup list进行分配,lookup list也由列表列表组成

我使用了“all”方法来匹配列表中的值。如果查找列表中存在该列表值,则应更新新列表中的第二个位置元素。但事实并非如此。==比较值为所有元素生成错误匹配,即使它们都存在于两个列表中

我还尝试了索引查找命令的各种组合,但它们无法解压缩每个列表的值

我的代码如下。目标是用lookupList中的数字替换newData中的“xxx”值

lookupList= [['Garry','34'],['Simon', '24'] ,['Louise','13'] ]

newData = [['Louise','xxx'],['Garry', 'xxx'] ,['Simon','xxx'] ]  

#Matching values
for i in newData: 
    if (all(i[0] == elem[0] for elem in lookupList)):
        i[1] = elem[1]

您无法使用
all()
,因为
elem
不是生成器表达式之外的局部变量

不要使用列表,而是使用字典来存储
lookupList

lookupDict = dict(lookupList)
查找匹配项是一种简单的固定时间(快速)查找:


您应该改用字典,如下所示:

lookupList = newData = {}

old_lookupList = [['Garry','34'],['Simon', '24'] ,['Louise','13'] ]
old_newData = [['Louise','xxx'],['Garry', 'xxx'] ,['Simon','xxx'] ] 

#convert into dictionary
for e in old_newData: newData[e[0]] = e[1]
for e in old_lookupList: lookupList[e[0]] = e[1]

#Matching values
for key in lookupList:
    if key in newData.keys():
        newData[key]=lookupList[key]

#convert into list
output_list = []

for x in newData:
    output_list.append([x, newData[x]])

我喜欢以下代码,因为它可以以不同的方式进行调整和使用:

lookupList= [ ['Garry', '34'],['Simon', '24'] ,['Louise', '13'] ]

newData = [ ['Louise', 'xxx'],['Garry', 'xxx'], ['Peter', 'xxx']  ,['Simon', 'xxx'] ]  

#Matching values
for R in newData:
    for i in range(0, len(lookupList) + 1):
        try:
            if lookupList[i][0] == R[0]:
                R[1] = lookupList[i][1]
                break
        except:
            print('Lookup fail on record:', R) 

print(newData)

为什么不直接使用字典呢?@MartijnPieters我在考虑这个问题,但鉴于我的应用程序正在生成一个列表列表,所以我认为这可能是最好的选择。另外,生成的字符串可能非常冗长,我不确定这会对字典产生什么影响。我还将在每个列表中使用几百个列表。字典是处理这个问题最有效的方法吗?当然,毫无疑问。不会有任何新的字符串对象;您将从列表中创建的词典引用了相同的字符串对象。@MartijnPieters好的,谢谢,我想我使用词典的犹豫源于我自己对词典的想象。如果字典中使用的键的字符串长度没有限制,那么这一定是最好的解决方案。
lookupList= [ ['Garry', '34'],['Simon', '24'] ,['Louise', '13'] ]

newData = [ ['Louise', 'xxx'],['Garry', 'xxx'], ['Peter', 'xxx']  ,['Simon', 'xxx'] ]  

#Matching values
for R in newData:
    for i in range(0, len(lookupList) + 1):
        try:
            if lookupList[i][0] == R[0]:
                R[1] = lookupList[i][1]
                break
        except:
            print('Lookup fail on record:', R) 

print(newData)