如何在Python中将一个列表中的项与另一个列表中的项进行匹配?

3
我有一个名为users2的列表,它是用户的主列表。我还有另一个名为codes的列表,其中包含users2中每个用户的代码。相关用户的代码与users2中的顺序相同。因此,例如,bil的代码为56,因为它是users2中的第二个项目,也是codes中的第二个项目。
我还有另一个名为users1的列表,其中包含来自users2的某些名称。我想输出基于users2中相同用户的代码的与users1关联的代码列表。因此,如果user1的第一项是bil,则我希望我的输出列表的第一项是56。如果users1具有未在users2中的用户名,则输出代码列表中的索引应为空或“”。我需要使用Python实现此操作。
这是我的代码:
users1=['bil','kim','john''tim']
users2['jim','bil','kim','tim''mike']
codes=['12''56','10','34','67']


for i in  range(len(users2)):
    for j in range(len (users1)):
        if users2[i]  == users1[j]:
            ordered.append(zipcodes[j])
print ordered
4个回答

2
你可能在使用错误的数据结构。你想要将 users2codes 合并成一个字典。
users1=['bil','kim','john','tim']
users2 = ['jim','bil','kim','tim','mike']
codes=['12','56','10','34','67']

users2_codes = dict(zip(users2, codes))
users1_codes = [users2_codes[user] if user in users2_codes else '' for user in users1 ]
print(users1_codes)

#>>> ['56', '10', '', '34']

1
你可以从 users2codes 构建一个字典,然后循环遍历 users1 并查找:
[dict(zip(users2, codes)).get(u) for u in users1]
# ['56', '10', None, '34']

在字典的get方法中,您可以为缺失的用户指定不同的值:

[dict(zip(users2, codes)).get(u, "") for u in users1]
# ['56', '10', '', '34']

1

只需保持简单易懂。使用列表和字典加上几个循环即可解决问题。

users1=['bil','kim','john','tim']
users2 = ['jim','bil','kim','tim','mike']
codes=['12','56','10','34','67']

name_codes = {}
for key, value in zip(users2, codes):
    name_codes[key] = value

result = []
for user1 in users1:
    for user2 in name_codes:
        if user1 == user2:
            result.append(name_codes[user2])
    if user1 not in name_codes:
        result.append('')
print(result)

输出:

['56', '10', '', '34']

更新:
我修复了你的原始代码:
ordered = []
for user in users1:
    for i in range(len(users2)):
        if user == users2[i]:
            ordered.append(codes[i])
    if user not in users2:
        ordered.append('')
print(ordered)

输出:

['56', '10', '', '34']

0
你可以尝试使用字典将users2列表和codes列表存储为键值对。然后在users1列表和该列表之间进行比较,并打印出codes。
代码:
    user2=dict()
    users2 = {'jim':'12','bil':'56','kim':'10','tim':'34','mike':'67'}
    users1=["bil",'kim','john','tim']
    ordered=list()

for i in users1:
 for j in users2:
    if i==j:
     ordered.append(users2[j])
 if i not in users2:
    ordered.append('')
print ordered

输出:

    ['56','10','','34']

没错,不需要使用'""',只用''就可以了。 - RoadRunner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接