繁体   English   中英

在dict中将键从float转换为int in dict in list in dict

[英]Converting keys from float to int in dict in dict in list in dict

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

数据:

data =
{'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”:我知道键是不可变的,所以我用谷歌搜索发现“pop”是一种替代解决方案

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)

问题是您在迭代字典时要修改字典:

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

您可以考虑改用列表推导:

for k_l1, v_l1 in data.items(): #iterate first level of dict
    for k_l2, v_l2 in v_l1.items(): #iterate second level of dict
        data[k_l1][k_l2] = [{ int(key): val  for key, val in elt.items() } for elt in v_l2] # update the list

Output:

{'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)}]}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM