python - 如何在更改python中的值时合并一个嵌套字典和一个简单字典?

Posted

技术标签:

【中文标题】python - 如何在更改python中的值时合并一个嵌套字典和一个简单字典?【英文标题】:How do I merge one nested dictionary and one simple dictionary while changing the value in python? 【发布时间】:2018-05-25 07:45:18 【问题描述】:

我有两本这样的字典:

dict1 = 'foo': 3.0, 'bar': 2.69, 'baz': 3.0

dict2 = 'foo': '11-abc1': 0.47, 'bar': '11-abc1': 0.30, '12-abc1': 0.0, 'baz': '14-abc1': 0.47

现在我想在乘以值的同时合并这两个字典。输出应如下所示:

dict3 = 'foo': '11-abc1': 3.0 * 0.47, 'bar': '11-abc1': 
 2.69 * 0.30, '12-abc1': 2.69 * 0.0, 'baz': '14-abc1': 3.0 * 0.47

最有效的方法是什么?

【问题讨论】:

迭代dict1中的项目,每次迭代dict2的相关子字典中的键,每个键取值并将其与dict1中的值相乘 【参考方案1】:

你可以试试这个:

dict1 = 'foo': 3.0, 'bar': 2.69, 'baz': 3.0
dict2 = 'foo': '11-abc1': 0.47, 'bar': '11-abc1': 0.30, '12-abc1': 0.0, 'baz': '14-abc1': 0.47
new_dict = a:c:d*dict1[a] for c, d in b.items() for a, b in dict2.items()

输出:

'bar': '12-abc1': 0.0, '11-abc1': 0.8069999999999999, 'foo': '11-abc1': 1.41, 'baz': '14-abc1': 1.41

使用字符串格式展示代码的工作原理:

dict1 = 'foo': 3.0, 'bar': 2.69, 'baz': 3.0
dict2 = 'foo': '11-abc1': 0.47, 'bar': '11-abc1': 0.30, '12-abc1': 0.0, 'baz': '14-abc1': 0.47
new_dict = a:c:"*".format(d, dict1[a]) for c, d in b.items() for a, b in dict2.items()

输出:

'bar': '12-abc1': '0.0*2.69', '11-abc1': '0.3*2.69', 'foo': '11-abc1': '0.47*3.0', 'baz': '14-abc1': '0.47*3.0'

编辑:对最终值求和:

import itertools
s = 'bar': '12-abc1': 0.0, '11-abc1': 0.8069999999999999, 'foo': '11-abc1': 1.41, 'baz': '14-abc1': 1.41
new_s = list(itertools.chain(*[b.items() for a, b in s.items()]))
final_data = a:sum(i[-1] for i in b) for a, b in itertools.groupby(sorted(new_s, key=lambda x:x[0]), key=lambda x:x[0])

输出:

'12-abc1': 0.0, '11-abc1': 2.2169999999999996, '14-abc1': 1.41

【讨论】:

如果我想合并 n 嵌套字典并将这些值相加:'12-abc1': 0.0, '11-abc1': 0.8069999999999999+1.41, '14- abc1': 1.41,你有什么好的方法吗?谢谢!

以上是关于python - 如何在更改python中的值时合并一个嵌套字典和一个简单字典?的主要内容,如果未能解决你的问题,请参考以下文章

Knockout JS,如何在更改可观察数组中的值时更改样式属性

TypeError:在Python中过滤JSON中的值时,字符串索引必须为整数

当我在另一个单元格中选择一个值时如何更改单元格的值

更改 redux 对象的值时,FlatList 项中的 TextInput 变得不集中

如何以编程方式更改/更新 Python PyQt4 TableView 中的数据?

当我要求它给出-1的值时,Python给了我列表的最后一个值[重复]