我有两个dictionaries
:
dict1 = {'key1': [val, val, val], 'key2': [val, val, val]}
dict2 = {'key1': [val, val, val], 'key2': [val, val, val]}
我需要在dict1
和dict2
个键中找到相同的值,并使用这些键创建一个新的dict
(dicr3 = {'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))
答案 0 :(得分:2)
您可以将值转换为元组。通过这种方式,它们变得可以清洗,你可以把它们变成一个字典:
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)
代码相比,此解决方案为O(n**2)
。
答案 1 :(得分:1)
这个怎么样:
{key1: key2 for key1, value1 in dict1.items() for key2, value2 in dict2.items() if value1 == value2}
答案 2 :(得分:0)
有更好的方法来做这个而不是双循环吗?
是的,您可以使用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
目前还不清楚你想要实现的合并操作,因此我会让你处理自己的情况,但设置是执行合并操作的好方法。