如何在字典和列表之间找到匹配项以从匹配项创建新列表?

时间:2019-05-02 20:52:37

标签: python list dictionary for-loop nested

我有两组数据-长度不相等的字典(数据)和列表(列表_1)。我想遍历两者并执行以下操作:

  1. 如果list_1中的项目与关键数据匹配,则将该值添加到第二个列表中。
  2. 如果该项目不在词典中,则添加“ NULL”

第三个列表的长度应与list_1相同

这是示例代码:

a = ['dim','john','joey','tron','bob','wilt','kobe']
b = [1,2,3,4,5,6,7]
data = dict(zip(a,b))

list_1 = ['bob','sue','mike','willy','john','may','beth','wilt']

list_2 = []

for x in list_1:
    for key,value in data.items():
        if x in key:
            list_2.append(key)
        elif x not in key:
            list_2.append("NULL")

结果将是

['NULL', 'NULL', 'NULL', 'NULL', 'bob', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'john', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'wilt', 'NULL']

是否可以使第三个列表显示如下?

['bob','NULL','NULL','NULL','john','NULL','NULL','wilt']

3 个答案:

答案 0 :(得分:2)

您可以通过简单地检查值是否在字典的键中来完成此操作。

list_1 = ['bob','sue','mike','willy','john','may','beth','wilt']
list_2 = []

for x in list_1:
    if x in data.keys():
        list_2.append(x)
    else:
        list_2.append("NULL")

如果想花哨和简洁,可以使用列表理解。

list_2 = [x if x in data.keys() else "NULL" for x in list_1]

答案 1 :(得分:1)

只需滚动一次列表。

for x in list_1:
    if x in list(data.keys()):
        list_2.append(x)
    else:
        list_2.append('NULL')

答案 2 :(得分:0)

如果使用函数len()检查输出的长度,则会得到56 = length_of_list1(8)* length_of_data(7)。但是您只需要与list1具有相同长度的list 2,因此您可能会发现循环for key,value in data.items():是多余的。您可以使用字典find中的if x in data.keys():函数进行检查,而无需一一检查k与x的关系。