Python - 寻找一种更有效的方法来对字典中的键重新编号

mad*_*aks 1 python dictionary key

这是我当前的字典:

{0: [(1,1.0)],
1: [(132,1.0)],
2: [(2000,1.0)],
3: [(234,1.0)]}
Run Code Online (Sandbox Code Playgroud)

现在,在某些情况下我可能不得不放弃这些钥匙。以 2 为例,生成的字典将如下所示:

{0: [(1,1.0)],
1: [(132,1.0)],
3: [(234,1.0)]}
Run Code Online (Sandbox Code Playgroud)

现在,我想对键重新编号,以便它们持续增加 1:

{0: [(1,1.0)],
1: [(132,1.0)],
2: [(234,1.0)]}
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是循环遍历字典并替换键,但考虑到我的实际字典有 2000 个键,这似乎不是最有效的路径。

有更有效的方法吗?

nos*_*klo 5

D = dict(enumerate(D[x] for x in sorted(D)))
Run Code Online (Sandbox Code Playgroud)

但请使用列表。它按数字索引并自动重新编号:

>>> L = [
...    [(1,1.0)],
...    [(132,1.0)],
...    [(2000,1.0)],
...    [(234,1.0)]
... ]
>>> del L[1]
>>> print(L)
[
    [(1,1.0)],
    [(2000,1.0)],
    [(234,1.0)]
]
Run Code Online (Sandbox Code Playgroud)

您可以使用将字典转换为列表L = [D[x] for x in sorted(D)] 并使用转换回字典格式D = dict(enumerate(L))

所以这可以是一个解决方案:

D = dict(enumerate(D[x] for x in sorted(D)))
Run Code Online (Sandbox Code Playgroud)

但最好首先使用列表。