Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将dict中dict中的float键转换为dict中dict中列表中的int键_Python_List_Dictionary - Fatal编程技术网

Python 将dict中dict中的float键转换为dict中dict中列表中的int键

Python 将dict中dict中的float键转换为dict中dict中列表中的int键,python,list,dictionary,Python,List,Dictionary,我有一个dict数据如下。我想把浮点数转换成整数。我该怎么做呢?我试过几种方法,但都没有用 数据: 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'

我有一个dict数据如下。我想把浮点数转换成整数。我该怎么做呢?我试过几种方法,但都没有用

数据:

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:迭代期间更改了字典键”: 我知道密钥是不可变的,所以我在谷歌上搜索了一下,发现“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
输出:

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

谢谢,但是输出是错误的。清单上应该有2本字典而不是1本@Krishna Chaurasiab,但没关系,我用了你的想法,自己得到了答案@Krishna ChaurasiaI已经更新了代码,请现在验证,有一个小的调整。