对 dict 中的所有 "key":"value" 对执行操作,并将结果存储在新的 dict 对象中

Posted

技术标签:

【中文标题】对 dict 中的所有 "key":"value" 对执行操作,并将结果存储在新的 dict 对象中【英文标题】:Perform operation on all "key":"value" pair in dict and store the result in a new dict object 【发布时间】:2018-07-30 19:08:49 【问题描述】:

我有一本字典S

1: [11.1, 13, 15.0], 2: [6.9, 8.5, 10.17], 3: [3.86, 4.83, 6.07], 4: [3.86, 4.83, 6.07], 5: [2.31, 2.58, 3.02]

还有一个数组D1_inv

[0.0248, 0.0296, 0.0357]

我需要获取 S 和 D1_inv 中所有项目的乘积。例如,对于S[1]

[round(i*j,4) for i,j in zip(S[1],D1_inv)]
Out[282]: [0.2753, 0.3848, 0.5355]

对于S[2]

[round(i*j,4) for i,j in zip(S[2],D1_inv)]
Out[283]: [0.1711, 0.2516, 0.3631]

有人可以帮我创建一个循环,以便我可以将所有这些产品存储在像 S 这样的字典中吗?

【问题讨论】:

【参考方案1】:

您可以使用字典理解来实现这一点。在您的字典理解中,您需要调用您的 列表理解 来对作为原始 my_dict 字典中的值存在的每个列表的数字乘积进行四舍五入。可以这样实现:

my_dict = 1: [11.1, 13, 15.0], 2: [6.9, 8.5, 10.17], 3: [3.86, 4.83, 6.07], 4: [3.86, 4.83, 6.07], 5: [2.31, 2.58, 3.02]
d1_inv = [0.0248, 0.0296, 0.0357]

new_dict = k: [round(i*j,4) for i, j in zip(v,d1_inv)] for k, v in my_dict.items()

其中new_dict 将是一个字典,其中包含初始my_dict 中的每个key,对应的值为:

1: [0.2753, 0.3848, 0.5355], 2: [0.1711, 0.2516, 0.3631], 3: [0.0957, 0.143, 0.2167], 4: [0.0957, 0.143, 0.2167], 5: [0.0573, 0.0764, 0.1078]

说明:此解决方案包括:

一个外部字典理解表达式,和 一个内部列表理解表达式。

这里,外层字典理解

k: [...*list comprehension*...] for k, v in my_dict.items()

将遍历字典,提取由my_dict.items() 返回的("key", "value") 对的元组。这里我使用k 作为新字典的键,其中v 的值将用于内部列表理解 表达式:

[round(i*j,4) for i, j in zip(v,d1_inv)]

这里,zip(v,d1_inv) 将返回对应于d1_invv 中相同位置的对象的元组(来自外部字典理解),然后我们调用round() 函数zip() 的迭代返回的元组 (i, j) 中存在的元素的乘积。

【讨论】:

【参考方案2】:

你可以用这个:

result = dict((k, [round(i*j,4) for i,j in zip(S[k],D1_inv)]) for k in S.keys())

【讨论】:

【参考方案3】:

这个理解应该这样做:

k: [round(i*j, 4) for i, j in zip(v, D1_inv)] for k, v in S.items()

【讨论】:

非常感谢! :)

以上是关于对 dict 中的所有 "key":"value" 对执行操作,并将结果存储在新的 dict 对象中的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode——word-break-ii*

dict,列表方法

dict理解中的多个键值对

python中的dict的详细介绍

python dict用法

Python3基础 dict keys+values 循环打印字典中的所有键和值