【问题标题】:Search list elements in dictionary and delete them if they don't exist在字典中搜索列表元素,如果它们不存在则删除它们
【发布时间】:2020-01-13 17:17:10
【问题描述】:

我有一个包含变量名称的列表和一个包含名称及其 ID 的字典。

例子:

name=['name1','name2'....'name20']

dicti={'1':'name1', '2':'name2','hello':'world",'animal':'dog',...'20':'name20'}

我想要的是用列表中的元素搜索字典。如果列表元素存在于字典中,则不要将其删除。

我得到了这个代码

for i in dicti.values() :
    for j in name :
        if j != i :
            del dicti[i]
        else :
            continue

当我运行代码时,我得到了这个错误:

KeyError: 'name1'

它不能删除我想要的元素。

【问题讨论】:

标签: python list dictionary


【解决方案1】:

使用dict 理解

例如:

name=set(['name1','name2','name20'])
dicti={'1':'name1', '2':'name2','hello':'world','animal':'dog',20:'name20'}
print({k:v for k, v in dicti.items() if v in name})

输出:

{20: 'name20', '1': 'name1', '2': 'name2'}

【讨论】:

  • 如果name 太大,请先转换为set
【解决方案2】:

您可以在此处使用filter()

name=['name1','name2'....'name20']
dicti={'1':'name1', '2':'name2','hello':'world",'animal':'dog',...'20':'name20'}
new_dict=dict(filter(lambda x: x[1] in name,dicti.items()))
print(new_dict)

输出

{'1': 'name1', '2': 'name2',... 20: 'name20'}

【讨论】:

    最近更新 更多