Python:将公共键从一个字典应用到另一个字典

Python:将公共键从一个字典应用到另一个字典,python,dictionary,Python,Dictionary,我刚刚接触字典,所以这可能是一个相当基本的问题 假设我有两个不同的字典,它们有相似的元素。 例如: 我希望能够取两个字典的交集,并将第一个字典的索引应用于第二个字典。所以我想要一个如下的输出: DictionaryCombo = {'Bob' : 1, 'Sue' : 3, 'George' : 4} 请原谅我对所需输出的格式设置,因为我不确定它应该是什么样子,尽管我知道我需要两个字典的交叉点的键和值对。如果您想要子集d1,那么它只在d2中存在元素 d1 = {'Bob': 1, 'M

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

假设我有两个不同的字典,它们有相似的元素。 例如:

我希望能够取两个字典的交集,并将第一个字典的索引应用于第二个字典。所以我想要一个如下的输出:

    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}
或者,如果您确实从两个列表开始,而不是从dict开始:

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:


如果要将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}
或者,如果您确实从两个列表开始,而不是从dict开始:

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:

dict.viewkeys方法提供了一个类似集合的对象,允许在交叉点处轻松查找两个字典的公共键:

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

common_keys = d1.viewkeys() & d2.viewkeys()
dict_with_d1_values = {k: d1[k] for k in common_keys}
# -> {'Bob': 1, 'George': 4, 'Sue': 3}
或者,如果您实际需要这两个值:

dict_with_combined_values = {k: (d1[k], d2[k]) for k in common_keys}
# -> {'Bob': (1, 1), 'George': (4, 5), 'Sue': (3, 2)}
dict.viewkeys方法提供了一个类似集合的对象,允许在交叉点处轻松查找两个字典的公共键:

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

common_keys = d1.viewkeys() & d2.viewkeys()
dict_with_d1_values = {k: d1[k] for k in common_keys}
# -> {'Bob': 1, 'George': 4, 'Sue': 3}
或者,如果您实际需要这两个值:

dict_with_combined_values = {k: (d1[k], d2[k]) for k in common_keys}
# -> {'Bob': (1, 1), 'George': (4, 5), 'Sue': (3, 2)}


请使用实际的Python语法来显示您的输入词典的外观,这样我们就有了一个新的解决方案。您能用实际的Python语法来澄清您的问题吗?字典没有顺序或自然索引。您的Keys1不能是有效的dict键,因为它是一个可变列表。使用真正的Python语法可以解决这个问题。嗯。。。我编辑了这个问题,这是正确的语法吗。。。语法错误:P你们真的知道什么是字典吗?或者你想要字典的列表?你想要什么让人困惑我很确定我想要字典,但我刚刚开始学习,不幸的是,我还没有找到一个合适的字典教程。请使用实际的Python语法来显示你的输入字典是什么样子,这样我们就有了一个答案。你能用实际的Python语法来澄清你的问题吗?字典没有顺序或自然索引。您的Keys1不能是有效的dict键,因为它是一个可变列表。使用真正的Python语法可以解决这个问题。嗯。。。我编辑了这个问题,这是正确的语法吗。。。语法错误:P你们真的知道什么是字典吗?或者你想要字典的列表?我很确定我想要字典,但我刚刚开始学习字典,不幸的是,我还没有找到一本像样的字典教程。我相信你最近的编辑是我想要的。如果这些值不是按时间顺序排列的呢?或者如果这些值真的只是任意数字呢?@user1620716在这种情况下,您需要一个名称->任意值dict,然后返回到第一个发布的示例…非常感谢您的帖子,它确实有帮助。但我想知道你是否能帮我解决另一个小问题。是否可以使用已创建的列表创建词典?我有一个任意数字的列表,还有一个日期列表。我希望它们是键值对。这是我认为Python教程中缺少的部分。好吧,字典太棒了!谢谢大家的帮助@user1620716我已经在答案中添加了这一点,因为它可能适用于您问题的第一次修订。您最近的编辑更符合我的要求,我相信。如果这些值不是按时间顺序排列的呢?或者如果这些值真的只是任意数字呢?@user1620716在这种情况下,您需要一个名称->任意值dict,然后返回到第一个发布的示例…非常感谢您的帖子,它确实有帮助。但我想知道你是否能帮我解决另一个小问题。是否可以使用已创建的列表创建词典?我有一个任意数字的列表,还有一个日期列表。我希望它们是键值对。这是我认为Python教程中缺少的部分。好吧,字典太棒了!谢谢大家的帮助@user1620716我在答案中添加了这一点,因为它可能适用于您问题的第一次修订。这些是非常有趣的功能!谢谢分享这些功能真的很有趣!谢谢分享