dist = {'Berlin': {'Boston' : 6096.945, 'LA' : 9331.657, 'Chicago' : 7102.591},
'Vienna': {'Boston' : 6508.405, 'LA' : 9841.482, 'Chicago' : 7560.970},
'London': {'Boston' : 5484.658, 'LA' : 9383.686, 'Chicago' : 6741.855}}
time = {'Berlin': {'Boston' : 6, 'LA' : 9, 'Chicago' : 7},
'Vienna': {'Boston' : 6, 'LA' : 9, 'Chicago' : 7},
'London': {'Boston' : 5, 'LA' : 8, 'Chicago' : 6}}
如何合并两个字典以获得列表中的值,如下所示:
new_dict = {'Berlin': {'Boston' : [6096.95, 6], 'LA' : [9331.65, 9], 'Chicago' : [7102.59, 7]},
'Vienna': {'Boston' : [6508.40, 6], 'LA' : [9841.48, 9], 'Chicago' : [7560.97, 7]},
'London': {'Boston' : [5484.65, 5], 'LA' : [9383.68, 8], 'Chicago' : [6741.85, 6]}}
提前谢谢!
您可以通过两级dict理解来解决这个问题
result = {
city_from: {city_to: [distance_val, time[city_from][city_to]]
for city_to, distance_val in cities_to.items()}
for city_from, cities_to in dist.items()
}
环路解决方案的经典2等价物
result = defaultdict(dict) # from collections import defaultdict
for city_from, cities_to in dist.items():
for city_to, distance_val in cities_to.items():
result[city_from][city_to] = [distance_val, time[city_from][city_to]]
不太优雅,但有效:
def combine_dicts(a, b):
for key in b:
if key in a:
if isinstance(a[key], dict) and isinstance(b[key], dict):
combine_dicts(a[key], b[key])
else:
a[key] = [a[key], b[key]]
else:
a[key] = [a[key], b[key]]
return a
注意:此函数将更改原始dicta
,如果您不想保持原始dict不变,请将副本传递给func
from copy import deepcopy
combined = combine_dicts(deepcopy(dist), deepcopy(time))