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

时间:2018-08-29 16:13:15

标签: python dictionary key

这是我当前的字典:

{0: [(1,1.0)],
1: [(132,1.0)],
2: [(2000,1.0)],
3: [(234,1.0)]}

现在,在某些情况下,我可能不得不使用这些键。以2为例,结果字典如下:

{0: [(1,1.0)],
1: [(132,1.0)],
3: [(234,1.0)]}

现在,我想对键重新编号,以使它们始终按1:

递增。
{0: [(1,1.0)],
1: [(132,1.0)],
2: [(234,1.0)]}

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

有没有更有效的方法?

3 个答案:

答案 0 :(得分:4)

D = dict(enumerate(D[x] for x in sorted(D)))

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

>>> 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)]
]

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

转换回dict格式

因此可以解决:

D = dict(enumerate(D[x] for x in sorted(D)))

但是最好只使用一个列表。

答案 1 :(得分:0)

>>> current = {0: [(1,1.0)],
...      1: [(132,1.0)],
...      3: [(234,1.0)]}

>>> new_dict = {}
>>> for i,key in enumerate(sorted(original.keys())):
...     new_dict[i] = a[key]

>>> new_dict
{0: [(1,1.0)],
 1: [(132,1.0)],
 2: [(234,1.0)]}

答案 2 :(得分:-2)

尝试使用OrderedDict解决您的问题可能值得一试

from collections import OrderedDict
d={0: [(1,1.0)],
1: [(132,1.0)],
3: [(234,1.0)],
-1:[(234,1.0)]} # added out of order case

od =OrderedDict(sorted(d.items()))

dict(zip(range(len(od)),od.values()))

输出:

{0: [(234, 1.0)], 1: [(1, 1.0)], 2: [(132, 1.0)], 3: [(234, 1.0)]}