我有一个字典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这样的词典中吗?
答案 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_inv
和v
(来自外部词典理解)中相同位置对应的对象元组,然后我们就是在由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()}