在python中,如何比较具有相同键的两个嵌套字典并使用条件更新值?
如果d2中的值小于d1中的值,我想更新d1中的值,以获得新的字典d:在python中,如何比较具有相同键的两个嵌套字典并使用条件更新值?,python,dictionary,Python,Dictionary,如果d2中的值小于d1中的值,我想更新d1中的值,以获得新的字典d: d1 = {'Berlin': {'Boston' : 9, 'LA' : 7, 'Chicago' : 1}, 'Vienna': {'Boston' : 5, 'LA' : 2, 'Chicago' : 8}, 'London': {'Boston' : 8, 'LA' : 6, 'Chicago' : 5}} d2 = {'Berlin': {'Boston' : 8, 'LA' : 9, '
d1 = {'Berlin': {'Boston' : 9, 'LA' : 7, 'Chicago' : 1},
'Vienna': {'Boston' : 5, 'LA' : 2, 'Chicago' : 8},
'London': {'Boston' : 8, 'LA' : 6, 'Chicago' : 5}}
d2 = {'Berlin': {'Boston' : 8, 'LA' : 9, 'Chicago' : 4},
'Vienna': {'Boston' : 3, 'LA' : 1, 'Chicago' : 5},
'London': {'Boston' : 5, 'LA' : 8, 'Chicago' : 8}}
这符合您的要求(通过
zip
将dict
项迭代在一起,以最少的dict
项重新组合为dict
,将其作为值,并再次以相同的k
作为键):
这些数据似乎更适合作为一个表(基本上是一个表)而不是一个嵌套的dict 创建输入数据帧后,只需使用一个为每个单元格选择最小值的函数来组合它们。下面是一种直接从以下方面实现的方法: 输出: 柏林维也纳伦敦 波士顿835 洛杉矶716 芝加哥155 如果您需要将其返回到dict,您可以使用: 即:
d = df_new.to_dict()
另外,我不是熊猫专家请向我们展示您最近一次尝试的代码以及您遇到的问题。另请参见:和。您需要在这里展示一些基本的努力;总的来说,我们是来帮助解决问题的,我们不是一个代码编写服务。尝试实现它,如果您的尝试以某种方式失败,请返回。提示:您需要一个嵌套的循环和
min
函数(或者如果if
检查较小的值并进行替换)。您可以只执行值的min,而不必执行项的min。另外,这允许您使用dict comp语法,它更容易阅读,也更简短<代码>{k:{k1:min(d1[k][k1],d2[k][k1]),用于d1[k]}中的k1}
d1 = {'Berlin': {'Boston' : 9, 'LA' : 7, 'Chicago' : 1},
'Vienna': {'Boston' : 5, 'LA' : 2, 'Chicago' : 8},
'London': {'Boston' : 8, 'LA' : 6, 'Chicago' : 5}}
d2 = {'Berlin': {'Boston' : 8, 'LA' : 9, 'Chicago' : 4},
'Vienna': {'Boston' : 3, 'LA' : 1, 'Chicago' : 5},
'London': {'Boston' : 5, 'LA' : 8, 'Chicago' : 8}}
>>> {k: dict([min(i, j) for i, j in zip(d1[k].items(), d2[k].items())]) for k in d1.keys()}
{'Berlin': {'Boston': 8, 'LA': 7, 'Chicago': 1},
'Vienna': {'Boston': 3, 'LA': 1, 'Chicago': 5},
'London': {'Boston': 5, 'LA': 6, 'Chicago': 5}}
import numpy as np
import pandas as pd
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
df_new = df1.combine(df2, np.minimum)
print(df_new)
d = df_new.to_dict()
{'Berlin': {'Boston': 8, 'LA': 7, 'Chicago': 1},
'Vienna': {'Boston': 3, 'LA': 1, 'Chicago': 5},
'London': {'Boston': 5, 'LA': 6, 'Chicago': 5}}