如何在保留字典结构的同时乘以字典数据类型中的列表值?
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}
在下面的字典中(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}