Skip to main content
 首页 » 编程设计

Python:将一个字典中的公共(public)键应用到另一个字典

2025年05月04日20kevingrace

我刚接触字典,所以这可能是一个相当基础的问题。

假设我有两个具有相似元素的不同词典。 示例:

    Dictionary1 = {'Bob' : 1, 'Mary' : 2, 'Sue' : 3, 'George' : 4} 
    Dictionary2 = {'Bob' : 1, 'Sue' : 2, 'Jill' : 3, 'Isaac' : 4, 'George' : 5} 

我希望能够获取两个字典的交集并将第一个字典的索引应用到第二个字典。所以我想要一个看起来像这样的输出:

    DictionaryCombo = {'Bob' : 1, 'Sue' : 3, 'George' : 4} 

请原谅我对我想要的输出的格式化,因为我不确定它应该是什么样子,虽然我知道我想要两个字典的交集的键值对。

请您参考如下方法:

如果你想子集 d1 所以它只有 d2 中存在的元素

d1 = {'Bob': 1, 'Mary': 2, 'Sue': 3, 'George': 4} 
d2 = {'Bob': 101, 'Sue': 102, 'Jill': 103, 'Isaac': 104, 'George': 105} 
{k: v for k, v in d1.items() if k in d2} 
# {'Bob': 1, 'Sue': 3, 'George': 4} 

或者您提到应用,那么您是否想更新 d2 中的值?

d2.update(d1) 
print d2 
# {'Sue': 3, 'Mary': 2, 'Jill': 103, 'Isaac': 104, 'Bob': 1, 'George': 4} 

或者,如果您真的从两个列表开始(而不是从字典开始):

el1 = ['Bob', 'Mary', 'Sue', 'George'] 
el2 = ['Bob', 'Sue', 'Jill', 'Isaac', 'George'] 
dict( (val, idx) for idx, val in enumerate(d1, start=1) if val in set(el2) ) 
#{'Bob': 1, 'Sue': 3, 'George': 4} 

如果你有两个列表,一个是键,一个是值,并希望将它们变成一个dict,那么你可以使用zip:

keys = ['Bob', 'Mary', 'Sue', 'George']   
vals = [1, 2, 3, 4] 
dict( zip(keys, vals) ) 
# {'Bob': 1, 'Mary': 2, 'Sue': 3, 'George': 4}