我有一个从JSON加载的字典,就像这样:
data = {
"1": [
"data",
"data"
],
"2": [
"data",
"data"
],
"3": [
"data",
"data"
]
"5": [
"data",
"data"
]
}
在这种情况下,缺少“ 4”,因为它已通过另一个功能删除。
我正在尝试编写一个可以对字典进行重新组织/排序的函数。这涉及固定这样的孔。在这种情况下,数字应该从1到4且没有孔,这意味着将键名5更改为4。
我写了一些代码来找出丢失的号码:
nums = [1, 2, 3, 5]
missing= 0
for x in range(len(data)):
if x not in nums and x is not 0:
missing += x
非常感谢您的帮助。我只是停留在如何进行上。
PS:我意识到这可能不是最佳的数据结构。这样,我可以轻松地将作为系统参数给出的整数与键进行匹配,从而找到相应的值。
所以我只是想出一种非常简单的方法...比我想象的要简单得多。
for x in range(len(data)):
for k, v in data.items():
data[x] = data.pop(k)
break
答案 0 :(得分:0)
您可以使用enumerate
来获取现有(已排序)键的新索引:
>>> data = {"1": ["data11", "data12"],
... "2": ["data21", "data22"],
... "3": ["data31", "data32"],
... "5": ["data51", "data52"]}
...
>>> {i: data[k] for i, k in enumerate(sorted(data), start=1)}
{1: ['data11', 'data12'],
2: ['data21', 'data22'],
3: ['data31', 'data32'],
4: ['data51', 'data52']}
或者就地使用(实际上if i != k:
并不是必需的,但是可能更快):
>>> for i, k in enumerate(sorted(data), start=1):
... if i != k:
... data[i] = data.pop(k)
...
>>> data
{1: ['data11', 'data12'],
2: ['data21', 'data22'],
3: ['data31', 'data32'],
4: ['data51', 'data52']}