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

Python将每个字典值乘以单个数字,python,dictionary,Python,Dictionary,我知道以前有人问过他的问题,但我很难按照前面答案中的示例来让代码正常工作。我有一本有12个键的字典,每个键的大小是102。我想把每个键中的每个值乘以一个数字。以下示例()是我尝试过的: my_data.update((x , y*1e6)for x, y in my_data.items()) 这将返回错误“不能将序列与“float”类型的非int相乘”。如果我将数字从一个float更改为一个数字(1e6到2),那么它只是将每个键的大小加倍 我试过这个: for key in my_data:

我知道以前有人问过他的问题,但我很难按照前面答案中的示例来让代码正常工作。我有一本有12个键的字典,每个键的大小是102。我想把每个键中的每个值乘以一个数字。以下示例()是我尝试过的:

my_data.update((x , y*1e6)for x, y in my_data.items())
这将返回错误“不能将序列与“float”类型的非int相乘”。如果我将数字从一个float更改为一个数字(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']]
编辑:


要求我显示我的_数据的外观。我不确定如何最好地显示它,因为我正在将12个不同文本文件中的数据导入字典。但每个文件都只是一个名称(键1、键2等),每个键都有102个浮点值(0、2.88e-9、9.6e-9等)。

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

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

这将强制删除通常由
1e6
生成的小数,但可能更适合清理数据,使其不包含序列(除非您实际尝试在dict中的每个键处生成1000000个项目序列)在你的描述中,几乎可以肯定,你的值是“代码>列表 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'

你能告诉我们my_数据是什么样子的吗?根据抛出的错误,值的内容必须是序列。为什么你不能提供一个示例字典和你想要的输出?”每个键有102个浮点值(0、2.88e-9、9.6e-9等)“->否。根据定义,每个键都有一个值。这就是字典的工作方式。你似乎被浮点数序列和浮点数之间的差异搞糊涂了。这就是我的想法。问题是类型实际上是float。@BogdanJaniszewski请参阅更新。我真的对输出很好奇。我不确定代码应该做什么。d、 intervalues部分不起作用,因为我的代码中没有定义d。如果我将d替换为定义为my_data之类的内容,则输出是一个名为v的列表,其中包含102个元素,所有元素都是float类型。@BogdanJaniszewski您是对的-在您的上下文中,它应该是
my_data
,而不是
d
。在任何情况下,上述代码段都应该生成
True
False
(不是102个值)。它是否由您输出
True
?它只是在没有输出的情况下运行。我认为这可能是IDE的问题,但我在IDLE和Spyder中都运行过它。在Spyder中,我可以进入变量资源管理器,看到有一个新值“v”,有102个浮点数。这也是我检查字典的方式,以查看它们是什么数据类型。我试图收集一个更简化的示例,说明字典包含的内容,但值实际上是浮点值(至少Spyder将其列为浮点值)。@BogdanJaniszewski-浮点乘以浮点值不会产生您指示的异常。发生这种情况的唯一方法是如果dict中的一个值是一个序列。时期在引发这种性质的异常时,Python不会意外地错误识别类型。
all([type(v) == float for v in my_data.itervalues()])