【问题标题】:Converting float to int in a dict in dict in list in dict将字典中的字典中的字典中的浮点数转换为int in 字典中的列表
【发布时间】:2021-03-24 01:52:37
【问题描述】:

我有一个如下的字典数据。我想将浮点数转换为整数。我该怎么做?我尝试了几种方法,但都无济于事。

数据:

{'ABC': {'2020-09-01': [{487.0: (0, 1), 488.0: (1, 2)}, {489.0: (0, 1), 481.0: (1, 2)}]},
'CDE': {'2020-01-01': [{484.0: (0, 1), 483.0: (1, 2)}, {482.0: (0, 1), 481.0: (1, 2)}]}}

我想要这个:

{'ABC': {'2020-09-01': [{487: (0, 1), 488: (1, 2)}, {489: (0, 1), 481: (1, 2)}]},
'CDE': {'2020-01-01': [{484: (0, 1), 483: (1, 2)}, {482: (0, 1), 481: (1, 2)}]}}

我试过这段代码,但我得到这个错误“RuntimeError: dictionary keys changed during iteration”:

for i in data:
    for date in data[i]:
        for model in range(0, len(data[i][date])):
            for k, v in data[i][date][model].items():
                data[i][date][model][int(k)] = data[i][date][model].pop(k)

【问题讨论】:

  • 您说您多次尝试,但无济于事。发布您认为最有可能接近正确的尝试的minimal reproducible example,我们将帮助您修复它。不要只要求我们为您编写所有代码。
  • 如果你只有{487.0: (0, 1), 488.0: (1, 2)}, {489.0: (0, 1), 481.0: (1, 2)},你会如何解决这个问题?你怎么能在你的整体数据结构中找到这样的字典?现在,知道了这两件事,你能想出解决整体问题的方法吗?

标签: python list dictionary


【解决方案1】:

我认为您的代码很接近,但正如您所说,您在迭代期间修改了字典键。这是构建中间替换值的一种方法。

d = {
    "ABC": {
        "2020-09-01": [{487.0: (0, 1), 488.0: (1, 2)}, {489.0: (0, 1), 481.0: (1, 2)}]
    },
    "CDE": {
        "2020-01-01": [{484.0: (0, 1), 483.0: (1, 2)}, {482.0: (0, 1), 481.0: (1, 2)}]
    },
}

print('d before:', d)

for k1,v1 in d.items():
    for k2,v2 in v1.items():
        v1[k2] = [{int(k4): v4 for k4,v4 in v3.items()} for v3 in v2]

print('d after:', d)

结果:

d before: {'ABC': {'2020-09-01': [{487.0: (0, 1), 488.0: (1, 2)}, {489.0: (0, 1), 481.0: (1, 2)}]}, 'CDE': {'2020-01-01': [{484.0: (0, 1), 483.0: (1, 2)}, {482.0: (0, 1), 481.0: (1, 2)}]}}
d after: {'ABC': {'2020-09-01': [{487: (0, 1), 488: (1, 2)}, {489: (0, 1), 481: (1, 2)}]}, 'CDE': {'2020-01-01': [{484: (0, 1), 483: (1, 2)}, {482: (0, 1), 481: (1, 2)}]}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2019-02-10
    • 2021-08-28
    • 2022-11-04
    • 2021-08-09
    • 2022-10-06
    • 1970-01-01
    相关资源
    最近更新 更多