尝试循环显示更改但未应用更改

时间:2019-09-15 01:19:04

标签: python python-3.x dictionary python-3.7

(使用Python 3)我正在处理一个词典中的多个词典,并试图运行try try循环,以浮点数替换单个词典中的所有数字。

我正在运行类似这样的东西

for index, value in enumerate(dictionary):
    for stats in value:
        try:
            stats = float(stats)
            print(stats)
        except:
            print(stats)

它实际上是在向我显示更改,但未应用更改。像这样,代码行返回了我需要在字典中进行更改的内容,但是当我随后运行完整的字典时,数字仍然是字符串。

有人对此有什么想法吗?

2 个答案:

答案 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