Python 将dict中dict中的float键转换为dict中dict中列表中的int键
我有一个dict数据如下。我想把浮点数转换成整数。我该怎么做呢?我试过几种方法,但都没有用 数据: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'
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已经更新了代码,请现在验证,有一个小的调整。