(使用Python 3)我正在处理一个词典中的多个词典,并试图运行try try循环,以浮点数替换单个词典中的所有数字。
我正在运行类似这样的东西
for index, value in enumerate(dictionary):
for stats in value:
try:
stats = float(stats)
print(stats)
except:
print(stats)
它实际上是在向我显示更改,但未应用更改。像这样,代码行返回了我需要在字典中进行更改的内容,但是当我随后运行完整的字典时,数字仍然是字符串。
有人对此有什么想法吗?
答案 0 :(得分:0)
在不完全了解字典外观的情况下,我不得不做一些假设。您遇到的问题是您没有直接修改dict中的值,而是创建了一个新实例并对其进行修改。
my_dict = {1:["1", "2", "3"], 2:["4", "5", "6"]} #I assume your dict looks similar to this?
my_dict = {i:[float(x) for x in my_dict[i]] for i in my_dict} #using list comprehension to modify each value
方法2使用for循环
for i in my_dict:
for index, v in enumerate(my_dict[i]):
my_dict[i][index] = float(my_dict[i][index])
答案 1 :(得分:0)
分配给stats
不会修改value
。
您需要分配给value
的就是索引,因此您可以像这样使用enumerate
:
d = {0: ['0', 'a'], 1: ['1', 'b']} # I assume your dict is like this
for value in d.values():
for i, stats in enumerate(value):
try:
value[i] = float(stats)
except ValueError:
pass
print(d) # -> {0: [0.0, 'a'], 1: [1.0, 'b']}
光秃秃的except
实在是不好的做法(请参阅PEP8)。在此示例中,我只需要捕获ValueError
,但是您可能还需要捕获TypeError
。