我知道之前已经问过他的问题,但是我很难按照之前的答案中的示例来获取我的代码。我有一个包含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等)
答案 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()])