说我有:
worksheet={
"a":[[1.0],[2.0, 3.0]],
"b":[[4.0]]
}
我的目标是将子列表中的每个值乘以一个值,保持相同的结构 - 例如,让我们说* 10,所以我需要:
worksheet={
"a":[[10.0],[20.0, 30.0]],
"b":[[40.0]]
}
每个dict值始终包含一个包含一个或多个子列表的列表。 每个子列表始终包含-least-一个浮点数。没有空列表(没有空的dict值)。我不能使用Pandas或Numpy。
答案 0 :(得分:3)
您可以使用嵌套理解:
worksheet = {'a': [[1.0], [2.0, 3.0]], 'b': [[4.0]]}
new_worksheet = {a:[[c*10 for c in i] for i in b] for a, b in worksheet.items()}
输出:
{'a': [[10.0], [20.0, 30.0]], 'b': [[40.0]]}
答案 1 :(得分:1)
更易读的解决方案是使用常规for-loops
for key in worksheet:
for list in worksheet[key]:
for sublist in list_:
for index, value in enumerate(sublist):
sublist[index] = value * 10
如果您使用map
而不是上一个for
,更具可读性
def multiply(val):
return val * 10
# ...
for sublist in list_:
sublist = map(multiply, sublist) # Note enumerate isnt necessary
之后,您可以使用列表理解轻松地将其更改为更有效的形式:
{key: [[value * 10 for value in sublist] for sublist in list_] for key, list in worksheet.items()}
或者,您可以使用支持以下内容的numpy
:
import numpy as np
arr = np.array([1,2,3,4])
arr *= 10