【问题标题】:How can I find matching items between a dictionary and a list to create a new list from the matches?如何在字典和列表之间找到匹配项以从匹配项中创建新列表?
【发布时间】:2019-09-21 10:14:22
【问题描述】:

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

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

第 3 个列表的长度应与 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']

【问题讨论】:

    标签: python list dictionary for-loop nested


    【解决方案1】:

    您可以通过简单地检查值是否在字典的键中来做到这一点。

    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]
    

    【讨论】:

      【解决方案2】:

      只需滚动一次列表。

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

      【讨论】:

        【解决方案3】:

        如果您使用函数 len() 检查输出的长度,您将得到 56=length_of_list1(8)*length_of_data(7)。但是您只需要与 list1 相同长度的列表 2,因此您可能会看到循环 for key,value in data.items(): 是多余的。您可以使用字典if x in data.keys():中的find函数来检查,不需要将x和k一一检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-20
          • 1970-01-01
          • 1970-01-01
          • 2020-09-11
          • 2015-02-09
          • 1970-01-01
          相关资源
          最近更新 更多