对所有"键":"值"执行操作在dict中配对并将结果存储在新的dict对象中

时间:2018-02-20 12:07:02

标签: python arrays loops dictionary

我有一个字典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这样的词典中吗?

3 个答案:

答案 0 :(得分:9)

您可以使用字典理解来实现此目的。在字典理解中,您需要调用列表理解来舍入每个列表中数字的乘积,作为原始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将是一个字典,其中包含初始key中的每个my_dict,其对应值为:

{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()}

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

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

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

答案 1 :(得分:6)

你可以使用这个:

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

答案 2 :(得分:2)

这种理解应该这样做:

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