基于值比较的python词典合并

2024-10-02 04:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个dictionaries

dict1 = {'key1': [val, val, val], 'key2': [val, val, val]}
dict2 = {'key1': [val, val, val], 'key2': [val, val, val]}

我需要在dict1dict2中找到具有相同值的键,并用这些键创建一个新的dictdicr3 = {'key1': key1})。有没有更好的方法来代替双for循环

for key, val in first_dict.items():
    for key2, val2 in sec_dict.items():
        if val == val2:
            print(str(key) + " : " + str(key2))

Tags: 方法keyinforitemsvaldictkey2
3条回答

这个呢:

{key1: key2 for key1, value1 in dict1.items() for key2, value2 in dict2.items() if value1 == value2}

Is there better way to do this instead of double for loop?

是的,您可以改用zip函数

dict1 = {'key1': [1, 2, 3], 'key2': [4, 5, 6]}
dict2 = {'key1': [4, 5, 6], 'key2': [7, 8, 9]}
for k1, k2 in zip(dict1, dict2):
  pass

现在还不清楚您要实现什么合并操作,因此我将让您处理自己的情况,但set是执行合并操作的一个好方法

可以将值转换为元组。这样,它们就可以散列,您可以将它们放入dict中:

dict1 = {'key1': [1,2,3], 'key2': [3,4,5]}
dict2 = {'key3': [2,3,4], 'key4': [1,2,3]}

same_lists = {}

for d in [dict1, dict2]:
    for k, v in d.items():
        same_lists.setdefault(tuple(v), []).append(k)

print(same_lists)
# {(1, 2, 3): ['key1', 'key4'], (3, 4, 5): ['key2'], (2, 3, 4): ['key3']}

现在您只需迭代dict的值并查找多个键:

for common_keys in same_lists.values():
    if len(common_keys) > 1:
        print(common_keys)
# ['key1', 'key4']

O(n**2)代码相比,这个解决方案是O(n)

相关问题 更多 >

    热门问题