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

Ind*_*ild 7 python arrays dictionary loops

我有一本字典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]}
Run Code Online (Sandbox Code Playgroud)

和一个数组D1_inv:

[0.0248, 0.0296, 0.0357]
Run Code Online (Sandbox Code Playgroud)

我需要获得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]
Run Code Online (Sandbox Code Playgroud)

并为S[2]:

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

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

Moi*_*dri 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()}
Run Code Online (Sandbox Code Playgroud)

在哪里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]}
Run Code Online (Sandbox Code Playgroud)

说明:此解决方案包括:

  • 外部词典理解表达,和
  • 内部列表理解表达式.

这里,外部字典理解:

{k: [...*list comprehension*...] for k, v in my_dict.items()}
Run Code Online (Sandbox Code Playgroud)

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

[round(i*j,4) for i, j in zip(v,d1_inv)]
Run Code Online (Sandbox Code Playgroud)

在此,zip(v,d1_inv)将返回对应于同一位置中的对象的元组d1_invv (从外字典理解),然后我们要求round()存在于元组中的元素的乘积函数(i, j)由返回zip()的迭代.


lll*_*lll 6

你可以用这个:

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