Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何比较具有相同键的两个嵌套字典并使用条件更新值?_Python_Dictionary - Fatal编程技术网

在python中,如何比较具有相同键的两个嵌套字典并使用条件更新值?

在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, '

如果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, '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}}