我在这里的问题中犯了一个错误(错误的请求输入和预期输出): 比较字典,更新NOT覆盖值
我不是在寻找这种解决方案: 将2个词典与通用密钥结合使用 因此这个问题不是重复的
问题陈述:
要求的输入:
d1 = {'a': ['a'], 'b': ['b', 'c']}
d2 = {'b': ['c', 'd'], 'c': ['e','f']}
Run Code Online (Sandbox Code Playgroud)
预期的输出(我不在乎键/值的顺序!):
new_dict = {'a': ['a'], 'b': ['b', 'c', 'd'], 'c': ['e', 'f']}
Run Code Online (Sandbox Code Playgroud)
将2个词典与公共密钥结合在一起的解决方案 给出以下输出:
new_dict = {'a': ['a'], 'b': ['b', 'c', 'c', 'd'], 'c': ['e', 'f']}
Run Code Online (Sandbox Code Playgroud)
我不希望重复项被存储。
我的解决方案(它可以工作,但效率不高):
unique_vals = []
new_dict = {}
for key in list(d1.keys())+list(d2.keys()) :
unique_vals = []
try:
for val in d1[key]:
try:
for val1 in d2[key]:
if(val1 == val) and (val1 not in unique_vals):
unique_vals.append(val)
except:
continue
except:
new_dict[key] = unique_vals
new_dict[key] = unique_vals
for key in d1.keys():
for val in d1[key]:
if val not in new_dict[key]:
new_dict[key].append(val)
for key in d2.keys():
for val in d2[key]:
if val not in new_dict[key]:
new_dict[key].append(val)
Run Code Online (Sandbox Code Playgroud)
这是我的处理方法:
d1 = {'a': ['a'], 'b': ['b', 'c']}
d2 = {'b': ['c', 'd'], 'c': ['e','f']}
dd1 = {**d1, **d2}
dd2 = {**d2, **d1}
{k:list(set(dd1[k]).union(set(dd2[k]))) for k in dd1}
Run Code Online (Sandbox Code Playgroud)
产生所需的结果。
我建议使用默认字典集合,并将集合作为默认值。它保证所有值都是唯一的,并使代码更简洁。
谈到效率,时间是 O(n^2)。
from collections import defaultdict
d1 = {'a': ['a'], 'b': ['b', 'c']}
d2 = {'b': ['c', 'd'], 'c': ['e','f']}
new_dict = defaultdict(set)
for k, v in d1.items():
new_dict[k] = new_dict[k].union(set(v))
for k, v in d2.items():
new_dict[k] = new_dict[k].union(set(v))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
138 次 |
最近记录: |