当前位置: 首页 > 面试题库 >

使用字母数字键以自然顺序对字典进行排序

朱俊雅
2023-03-14
问题内容

我有一个python字典:

d = {'a1': 123, 'a2': 2, 'a10': 333, 'a11': 4456}

当我使用排序字典时,OrderedDict得到以下输出:

from collections import OrderedDict
OrderedDict(sorted(d.items()))
# Output
# OrderedDict([('a1', 123), ('a10', 333), ('a11', 4456), ('a2', 2)])

有没有一种方法可以使其自然顺序:

OrderedDict([('a1', 123), ('a2', 2), ('a10', 333), ('a11', 4456)])
or 
{'a1': 123, 'a2': 2, 'a10': 333, 'a11': 4456}

谢谢。


问题答案:

您很幸运:该natsort模块可以提供帮助。首先,使用以下命令安装它:

pip install natsort

现在,您可以d.keys()转到natsort.natsorted并构建一个新的OrderedDict

import natsort
from collections import OrderedDict

d = {'a1' : 123, 
     'a2' : 2, 
     'a10': 333, 
     'a11': 4456}
keys = natsort.natsorted(d.keys())    
d_new = OrderedDict((k, d[k]) for k in keys)

简短的版本涉及排序d.items()从RomanPerekhrest的答案 得到了这个想法
):

d_new = OrderedDict(natsort.natsorted(d.items()))
d_new
OrderedDict([('a1', 123), ('a2', 2), ('a10', 333), ('a11', 4456)])


 类似资料: