我有两个具有相同键的字典,而值却是变量:
a = {1: [1, 2, 3, 4, 5], 2: [6, 7, 8], 3: [1, 3, 5, 7, 9]}
b = {1: [2, 3, 4, 7], 2: [6, 7], 3: [1, 3, 15, 10]}
我正在尝试使交集使用相同的键。我想要这个输出:
{1: [2, 3, 4], 2: [6, 7], 3: [1, 3]}
我尝试了以下命令:
dict(zip(a.keys() and b.keys(), a.values() and b.values()))
output: {1: [2, 3, 4, 7], 2: [6, 7], 3: [1, 3, 15, 10]}
但是,输出如下,这是错误的:
{1: [2, 3, 4, 7], 2: [6, 7], 3: [1, 3, 15, 10]}
答案 0 :(得分:2)
我认为这很清楚。如果没有,请进行澄清。
假设
我有两个具有相同键的字典
a = {1: [1, 2, 3, 4, 5], 2: [6, 7, 8], 3: [1, 3, 5, 7, 9]}
b = {1: [2, 3, 4, 7], 2: [6, 7], 3: [1, 3, 15, 10]}
c = {}
for key, val in a.items():
c[key] = []
for i in val:
if i in b[key]:
c[key].append(i)
print(c)
输出为:
{1: [2, 3, 4], 2: [6, 7], 3: [1, 3]}
答案 1 :(得分:1)
如果您知道字典具有相同的键,则可以这样做
c = {}
for key, list_a, list_b in zip(a.keys(), a.values(), b.values()):
c[key] = [value for value in list_a if value in list_b]
或者:
c = {}
for key, list_a, list_b in zip(a.keys(), a.values(), b.values()):
c[key] = list(set(list_a).intersection(list_b))
如果不确定它们具有相同的键,只需添加一个条件,例如
c = {}
for key_a, list_a, key_b, list_b in zip(a.keys(), a.values(), b.keys(), b.values()):
if key_a == key_b:
c[key_a] = [value for value in list_a if value in list_b]
答案 2 :(得分:1)
c= {key:list(set(a[key]) & set(b[key])) for key in a}
说明:使用字典理解,我遍历了'a'的每个键,并在两个词典'a'和'b'中创建了与该键对应的值列表的交集