【问题标题】:conditionally adding dictionary entries from a second dictionary to a new dictionary while preserving new dictionary keys有条件地将字典条目从第二个字典添加到新字典,同时保留新字典键
【发布时间】:2020-05-21 21:10:14
【问题描述】:

我有两个字典- dict1 = {'a':'value','b':'value','d':'value'} 和 dict2 = {'p':'blank','q':'blank','r':'blank','s':'blank'}。他们的密钥存储在两个列表中——list1 = ['a','b','c','d'] 和list2 = ['p','q','r','s']。 dict1 可能并不总是包含所有键值对。

我想添加从dict1 到dict2 的条目,if 键存在于 dict1 else 我想要“空白”

我写了这段代码:

for i in list1:
    if i in dict1.keys():
        dict2[i] = dict1[i]
    else:
        dict2[i] = "blank"

这将给我dict2 和来自list1 的密钥。如何修改此代码以保留条件但保留与dict2 关联的键,即['p','q','r','s']? 我想要的输出

dict2 = {'p':1,'q':2,'r':'blank','s':4}

两个字典中的键数总是相同的。

另外,有没有更 Pythonic 的方式来做到这一点? 看了here的一些回答,但没完全看懂。

【问题讨论】:

  • 你能发布预期的输出吗?只是为了澄清一些事情:)

标签: python dictionary


【解决方案1】:

所以如果我理解正确,您想将list1 的键“映射”到list2 的键吗?在这种情况下,您可以zip 两个列表按顺序遍历这两个列表,然后保持其余代码相同。一个小的改进是i in dict1.keys() 实际上与i in dict1 相同。

for i, j in zip(list1, list2):
    if i in dict1:
        dict2[j] = dict1[i]
    else:
        dict2[j] = "blank"

【讨论】:

    【解决方案2】:

    如果我理解正确,如果list1 中的项目在dict1 中,则使用list2 中的相应键更新dict2。

    您可以压缩列表并遍历两个列表中的键,使用条件语句设置值。

    dict1 = {'a':1,'b':2,'d':4}
    dict2 = {'p':'blank','q':'blank','r':'blank','s':'blank'}
    list1 = ['a','b','c','d']
    list2 = ['p','q','r','s']
    
    for a, b in zip(list1, list2):
        dict2[b] = dict1[a] if a in dict1 else 'blank'
    
    print(dict2)
    

    输出:

    {'p': 1, 'q': 2, 'r': 'blank', 's': 4}
    

    或者,您可以使用字典的update() 方法并在一行中更新所有值:

    dict2.update({b : dict1[a] if a in dict1 else 'blank' for a,b in zip(list1, list2)})
    

    update() 获取项目字典。在上面的行中,您正在创建一个具有字典理解的临时字典并更新dict2。

    【讨论】:

    • 使用 update() 如何改进代码?是更快还是有其他好处?
    • @sheth7 我已更新我的答案以提供有关update() 的一些信息。它没有更快。它只允许您一次更新多个项目。当然,最简单的解决方案是 Aurel Bílý 的答案中给出的 for 循环。
    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2020-11-20
    • 2019-08-25
    • 2019-08-29
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多