我有一个真正让我发疯的问题。通常这样做int(20.0)
会导致20
. 到现在为止还挺好。但:
levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())]
whilegex_dict[i]
返回一个浮点数,例如20.0
,结果为:
"invalid literal for int() with base 10: '20.0'"
我离咀嚼键盘的最后一块只有一步之遥。
我有一个真正让我发疯的问题。通常这样做int(20.0)
会导致20
. 到现在为止还挺好。但:
levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())]
whilegex_dict[i]
返回一个浮点数,例如20.0
,结果为:
"invalid literal for int() with base 10: '20.0'"
我离咀嚼键盘的最后一块只有一步之遥。
'20.0'
是一个字符串,而不是一个float
;您可以通过错误消息中的单引号来判断。您可以int
通过首先用 解析它float
,然后用 截断它来摆脱它int
:
>>> int(float('20.0'))
20
(尽管您可能希望在字典中存储浮点数而不是字符串,因为这似乎是您所期望的。)
看起来该值是一个字符串,而不是一个浮点数。所以你需要int(float(gex_dict[i]))
看起来问题在于它gex_dict[i]
实际上返回了 float 的字符串表示形式'20.0'
。尽管 int() 能够将浮点数转换为 int,并将整数的字符串表示形式转换为 int。它不具备将浮点数的字符串表示形式转换为 int 的能力。
int 的文档可以在这里找到:http: //docs.python.org/library/functions.html#int
问题是您有一个字符串而不是浮点数,请将此视为比较:
>>> int(20.0)
20
>>> int('20.0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '20.0'
您可以通过先转换为 float 然后再转换为 int 来解决此问题:
>>> int(float('20.0'))
20
所以在你的情况下:
levels = [int(float(gex_dict[i])) for i in sorted(gex_dict.keys())]