乘法在子列表中浮动作为字典中的值[已编辑]

时间:2018-05-24 00:36:24

标签: python list

说我有:

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。

2 个答案:

答案 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