【问题标题】:Python Dictionary remove pairs when key not matching reference list当键与参考列表不匹配时,Python字典删除对
【发布时间】:2021-12-02 14:17:04
【问题描述】:

这就是我所拥有的:

names = ['Bob', 'Mike', 'Nia', 'Tim', 'Holly', 'Liam', 'Dave']
temperatures = ['-0.3', '-0.6', '-0.8', '-0.2', '-1.3', '-2.1', '-0.4']

main_dictionary = {'Bob' : '-0.3', 'Mike': '-0.6', 'Nia' : '-0.8', 'Tim':'-0.2', 'Holly':'-1.3', 'Liam':'-2.1', 'Dave':'-0.4'}

我正在尝试通过将其与 selected_names 列表与 main_dictionary 进行比较来生成字典,以生成 updated_dictionary

selected_names = ['Nia', 'Holly', 'Liam', 'Dave']

updated_dictionary = {'Nia' : '-0.8',  'Holly':'-1.3', 'Liam':'-2.1', 'Dave':'-0.4'}

到目前为止,在我的项目中,我已经使用 .intersection 比较了许多列表,但似乎可以弄清楚如何将其应用于字典。

【问题讨论】:

    标签: python list intersection


    【解决方案1】:

    可能一个简单的 dict 理解就足够了:

    updated_dictionary = {x: main_dictionary[x] for x in selected}
    

    如果selected 可能包含无效键,您可以明确地忽略它们:

    updated_dictionary = {x: main_dictionary[x] for x in selected if x in main_dictionary[x]}
    

    另请参阅Create a dictionary with list comprehensionFilter dict to contain only certain keys?

    【讨论】:

    • 不确定 OP 的数据是否会发生这种情况,但如果 main_dictionary 中缺少密钥,您将收到错误消息
    • {x: main_dictionary[x] for x in selected if x in main_dictionary}
    • 很好,我已经把它放进去了,但还是谢谢妈妈!
    • 谢谢你们,这太棒了,你们都让它看起来太容易了
    【解决方案2】:

    试试这个

    main_dictionary = {'Bob' : '-0.3', 'Mike': '-0.6', 'Nia' : '-0.8', 'Tim':'-0.2', 'Holly':'-1.3', 'Liam':'-2.1', 'Dave':'-0.4'}
    selected_names = ['Nia', 'Holly', 'Liam', 'Dave']
    
    newd = {k:v for k,v in main_dictionary.items() if k in selected_names}
    
    print(newd)
    

    【讨论】:

    • 你的解决方案效率很低,对于main_dictionary中的每个键,你必须遍历selected_names的整个列表。
    • python 是一种低效的语言
    • @ypnos 如果缺少密钥,这种方法不会抛出错误。所以它至少有一个优势;)
    • @ypnos 它工作得很好,但效率低下我猜你的意思是慢?如果我的项目不需要很快,这有关系吗?
    • 是的,如果您的selected_names 很大或main_dictionary 很大,那么它就会成为一个问题。问题是,为什么一开始就开始编写低效的代码?
    【解决方案3】:

    试试这个:

    names = ['Bob', 'Mike', 'Nia', 'Tim', 'Holly', 'Liam', 'Dave']
    temperatures = ['-0.3', '-0.6', '-0.8', '-0.2', '-1.3', '-2.1', '-0.4']
    
    main_dictionary = {
        'Bob': '-0.3',
        'Mike': '-0.6',
        'Nia': '-0.8',
        'Tim': '-0.2',
        'Holly': '-1.3',
        'Liam': '-2.1',
        'Dave': '-0.4'
    }
    
    selected_names = ['Nia', 'Holly', 'Liam', 'Dave']
    output = {
        'Nia': '-0.8',
        'Holly': '-1.3',
        'Liam': '-2.1',
        'Dave': '-0.4'
    }
    updated_dictionary = {k: v for k, v in main_dictionary.items() if k in selected_names}
    
    if __name__ == '__main__':
        print("main", main_dictionary)
        print("updated", updated_dictionary)
        print(updated_dictionary == output)
    
    # It produces:
    # {'Nia': '-0.8', 'Holly': '-1.3', 'Liam': '-2.1', 'Dave': '-0.4'}
    # updated {'Nia': '-0.8', 'Holly': '-1.3', 'Liam': '-2.1', 'Dave': '-0.4'}
    # True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2022-10-14
      • 2018-12-26
      • 2018-04-29
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多