首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用列表列表作为查找表并更新新列表列表中的值

使用列表列表作为查找表并更新新列表列表中的值
EN

Stack Overflow用户
提问于 2016-08-22 16:40:52
回答 3查看 5.5K关注 0票数 5

我有一个创建列表列表的应用程序。列表中的第二个元素需要使用查找列表来分配,它也包括一个列表列表。

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

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

我的密码在下面。目标是将newData中的"xxx“值替换为lookupList中的数字。

代码语言:javascript
复制
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]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-22 16:43:41

您不能使用all()做您想做的事情,因为elem不是生成器表达式之外的局部变量。

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

代码语言:javascript
复制
lookupDict = dict(lookupList)

查找匹配是一个简单的常数时间(快速)查找:

代码语言:javascript
复制
for entry in newData:
    if entry[0] in lookupDict:
        entry[1] = lookupDict[entry[0]]
票数 4
EN

Stack Overflow用户

发布于 2016-08-22 16:54:17

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

代码语言:javascript
复制
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]])
票数 0
EN

Stack Overflow用户

发布于 2019-02-23 12:12:32

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39084661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档