Python将每个字典值乘以单个数字

时间:2016-02-23 21:40:37

标签: python dictionary

我知道之前已经问过他的问题,但是我很难按照之前的答案中的示例来获取我的代码。我有一个包含12个密钥的字典,每个密钥的大小为102.我想将每个密钥中的每个值乘以一个数字。以下示例(Python: Perform an operation on each dictionary value)以下是我的尝试:

my_data.update((x , y*1e6)for x, y in my_data.items())

这会返回错误"不能将序列乘以' float'类型的非int。如果我将数字从浮点数改为数字(1e6到2),那么它只会使每个键的大小加倍。

我试过这个:

for key in my_data:
    my_data[key] *= 2

所有这一切都是每个键大小的两倍(102到204)。我可以成功地将单个键乘以所需的数字,如下所示:

my_data['AP_33.txt_dose'] = [x * 1e6 for x in my_data['AP_33.txt_dose']]

编辑:

要求我展示my_data的样子。我不确定如何最好地显示它,因为我将12个不同文本文件中的数据导入字典。每个只是一个名称(key_1,key_2等),每个键有102个浮点值(0,2.88e-9,9.6e-9等)

2 个答案:

答案 0 :(得分:3)

您的值是列表或字符串(某种形式的可迭代)。您可以将序列乘以整数,但不能乘以浮点数。您可以将更新更改为:

my_data.update((x , y*int(1e6))for x, y in my_data.items())

这将强制通常由1e6生成的小数,但是它可能更适合清理数据,因此它不包含序列(除非您实际上尝试在每个序列中生成1000000个项目序列你的词典中的关键词。)

答案 1 :(得分:2)

根据您的描述,几乎可以肯定您的值为list s或类似的东西(在任何情况下,都不是数字的)。请考虑以下事项:

In [1]: [2, 3] * 2
Out[1]: [2, 3, 2, 3]

In [2]: [2, 3] * 1.6
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call     last)
<ipython-input-2-a0488881aa64> in <module>()
----> 1 [2, 3] * 1.6

TypeError: can't multiply sequence by non-int of type 'float'

乘法的东西是它超载了。将数字乘以数字是算术乘法,但对于列表等,它意味着积分的重复连接。

修改

如果您的值确实是浮点数,那么如果您发布了

的输出,那将会很有趣
all([type(v) == float for v in my_data.itervalues()])