Python 有条件地将第二个词典中的词典条目添加到新词典中,同时保留新词典键

Python 有条件地将第二个词典中的词典条目添加到新词典中,同时保留新词典键,python,dictionary,Python,Dictionary,我有两条命令- 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中存在键,我想将dict1中的条目添加到dict2,否则我想要“空白” 我写了这段代码: for i in

我有两条命令-
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中存在键,我想将
dict1
中的条目添加到
dict2
,否则我想要“空白”

我写了这段代码:

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}
两个dict中的键数始终相同

还有,有没有更像蟒蛇的方法?
我看到了一些答案,但没有完全理解。

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

zip中i,j的
(列表1,列表2):
如果我在第1条中:
dict2[j]=dict1[i]
其他:
dict2[j]=“空白”

如果我理解正确,如果
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循环。