【发布时间】:2015-12-16 20:21:30
【问题描述】:
我有两个格式相同的字典(每个 80K 条目):
A= {'1':'a', '2':'b', '3':'c', '4':'d'}
B= {'2':'b', '3':'a', '4':'d', '5':'e'}
Dict_A 中的一些键:值对与 Dict_B 重叠。把这些字典想象成维恩图圈。我的目标是找到这两个字典的重叠部分并生成新字典:Dict_A、Dict_B、Dict_C 和 Dict_D。 我想最终得到 6 个字典:
原版词典:
A= {'1':'a', '2':'b', '3':'c', '4':'d'}
B= {'2':'b', '3':'a', '4':'d', '5':'e'}
Dict_A:具有 A 唯一键的项目
Dict_A = {'1':'a'}
Dict_B:具有 B 唯一键的项目
Dict_B = {'5':'e'}
Dict_C:A 和 B 共享键但值不同的项
Dict_C = {'3':'a', '3':'c'}
Dict_D:具有由 A 和 B 共享的键和值的项目。
Dict_D = {'2':'b', '4':'d'}
我知道如何通过设置它们来找到这些东西的长度:
shared1 = set(A.items()) & set(B.items())
shared2 = set(A.keys()) & set(B.keys())
然后我可以找出 Dict_C 中应该有多少: len(shared2) - len(shared1)
但我不知道如何让它们成为字典。
【问题讨论】:
-
键必须是唯一的
-
Dict_C 不会发生,除非您附加到容器
-
除了@depperm 所说的,如果两个字典的键值映射集保持不变,那么最好将它们表示为列表。此时,您可以轻松使用列表推导。
-
啊是的.. 我只需要制作两个字典 C1 和 C2,它们的项目数完全相同,键相同,值不同。
标签: python dictionary hash set union