Python 子发布者中的乘法浮动作为字典中的值[已编辑]

Python 子发布者中的乘法浮动作为字典中的值[已编辑],python,list,Python,List,假设我有: worksheet={ "a":[[1.0],[2.0, 3.0]], "b":[[4.0]] } 我的目标是将SubPublists中的每个值乘以一个值,-保持相同的结构-比如说*10,所以我需要: worksheet={ "a":[[10.0],[20.0, 30.0]], "b":[[40.0]] } 每个dict值将始终包含一个包含一个或多个子列表的列表。 每个子列表将始终至少包含一个浮点。无空列表(无空dict值)。我不能使用Pandas或Numpy。您可以使用嵌套理解

假设我有:

worksheet={
"a":[[1.0],[2.0, 3.0]],
"b":[[4.0]]
}
我的目标是将SubPublists中的每个值乘以一个值,-保持相同的结构-比如说*10,所以我需要:

worksheet={
"a":[[10.0],[20.0, 30.0]],
"b":[[40.0]]
}
每个dict值将始终包含一个包含一个或多个子列表的列表。
每个子列表将始终至少包含一个浮点。无空列表(无空dict值)。我不能使用Pandas或Numpy。

您可以使用嵌套理解:

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()}
{key: [[value * 10 for value in sublist] for sublist in list_] for key, list in worksheet.items()}
输出:

{'a': [[10.0], [20.0, 30.0]], 'b': [[40.0]]}

您可以使用嵌套理解:

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()}
{key: [[value * 10 for value in sublist] for sublist in list_] for key, list in worksheet.items()}
输出:

{'a': [[10.0], [20.0, 30.0]], 'b': [[40.0]]}

更具可读性的解决方案是对循环使用常规的

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
之后,您可以使用列表理解轻松地将其更改为更有效的形式:

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()}
{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

更具可读性的解决方案是对循环使用常规的

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
之后,您可以使用列表理解轻松地将其更改为更有效的形式:

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()}
{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

所有子列表中的每个值都将乘以相同的值。换句话说,所有数字都将乘以一个数字。在这个例子中:(1.0,2.0,3.0,4.0)乘以10.0为什么标题上写着“乘法键”?您只是将列表中的元素相乘,而不是键相乘。@Barmar您完全正确。我编辑了这个标题,希望它能在同样的情况下帮助其他人。非常感谢你的建议。我的错。-所有子列表中的每个值都将乘以相同的值。换句话说,所有数字都将乘以一个数字。在这个例子中:(1.0,2.0,3.0,4.0)乘以10.0为什么标题上写着“乘法键”?您只是将列表中的元素相乘,而不是键相乘。@Barmar您完全正确。我编辑了这个标题,希望它能在同样的情况下帮助其他人。非常感谢你的建议。我的错。-千万不要在程序中使用默认关键字
dict
list
。非常感谢@leoschet。我会记住的。没错,@kvmahesh我在使用list作为变量时遇到了一个大问题。我目前使用的3D程序已经停止工作了,我花了好几个小时,直到我最终意识到我改变了list()函数的值。。。天啊。。。我永远不会忘记那一课……永远不要在节目中使用默认关键字
dict
list
,非常感谢@leoschet。我会记住的。没错,@kvmahesh我在使用list作为变量时遇到了一个大问题。我目前使用的3D程序已经停止工作了,我花了好几个小时,直到我最终意识到我改变了list()函数的值。。。天啊。。。我永远不会忘记那一课。。。