如何在保留字典结构的同时乘以字典数据类型中的列表值?

How to multiply the list values within a dictionary data type, while preserving the dictionary structure?

在下面的字典中(class,列表):

defaultdict(<class 'list'>, {2480: ['0.25', '0.1', '0.083'], 2651: ['0.43', '0.11', '0.23']})
defaultdict(<class 'list'>, {2480: ['0.15', '0.15', '0.6'], 2651: ['0.26', '0.083', '0.23']})

我试过:

for key, val in data.values():
    print(key, reduce(mul, (float(f) for f in val), 1))

这给我错误:

for key, val in data.values(): AttributeError: 'str' object has no attribute 'values

也尝试过,

for k1 in data.items():
    print(k1)

这会打印:

(2480, ['0.25', '0.1', '0.083']) (2651, ['0.43', '0.11', '0.23'])

但我无法使用 reduce(mul() 函数将浮点值相互相乘。

我想将浮点值相互相乘但保留 class,保留列表值。

我希望输出为:

defaultdict(<class 'list'>, {2480: ['0.002075'], 2651: ['0.010879']})
defaultdict(<class 'list'>, {2480: ['0.0135'], 2651: ['0.0049634']})

但是,defaultdict(<class 'list' 保留在这里只是为了显示数据结构。

谢谢,

你可以先定义一个multiply函数:

>>> def multiply(*args):
...     res = args[0]
...     for arg in args[1:]:
...         res *= arg
...     return res

如果你只有两个字典:

d1_product = {key: multiply(*map(float, values)) for key, values in d1.items()}
d2_product = {key: multiply(*map(float, values)) for key, values in d2.items()}

虽然,如果你有两个以上的词典,你可能想尝试这样的事情(你必须稍微修改它以跟踪各个字典,但是......也许尝试使用 enumerate, 像这样吗?

res = {}
for i, d in enumerate([d1, d2]):
    for key in d:
        values = map(float, d[key])
        product = multiply(*values)
        res[str(key) + str(i)] = product

结果是:

>>> res
{'24801': 0.0135, '26511': 0.004963400000000001, '24800': 0.002075, '26510': 0.010879000000000002}