我有一个创建列表列表的应用程序。列表中的第二个元素需要使用查找列表来分配,它也包括一个列表列表。
我使用了"all“方法来匹配列表中的值。如果列表值存在于查找列表中,则应更新新列表中的第二个位置元素。然而,情况并非如此。==比较为所有元素生成一个错误匹配,即使它们都存在于两个列表中。
我也尝试过各种索引查找命令的组合,但它们无法解压每个列表的值。
我的密码在下面。目标是将newData中的"xxx“值替换为lookupList中的数字。
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]发布于 2016-08-22 16:43:41
您不能使用all()做您想做的事情,因为elem不是生成器表达式之外的局部变量。
不要使用列表,而是使用字典来存储lookupList
lookupDict = dict(lookupList)查找匹配是一个简单的常数时间(快速)查找:
for entry in newData:
if entry[0] in lookupDict:
entry[1] = lookupDict[entry[0]]发布于 2016-08-22 16:54:17
您应该使用字典,如下所示:
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]])发布于 2019-02-23 12:12:32
我喜欢下面的代码,因为它可以以不同的方式被调整和使用:
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)https://stackoverflow.com/questions/39084661
复制相似问题