对 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_inv
和v
中相同位置的对象的元组(来自外部字典理解),然后我们调用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 对象中的主要内容,如果未能解决你的问题,请参考以下文章