Jer*_*ril 0 python sorting dictionary
我有一个python字典:
d = {'a1': 123, 'a2': 2, 'a10': 333, 'a11': 4456}
Run Code Online (Sandbox Code Playgroud)
当我使用字典对字典进行排序时,OrderedDict我得到以下输出:
from collections import OrderedDict
OrderedDict(sorted(d.items()))
# Output
# OrderedDict([('a1', 123), ('a10', 333), ('a11', 4456), ('a2', 2)])
Run Code Online (Sandbox Code Playgroud)
有没有办法按自然顺序得到它:
OrderedDict([('a1', 123), ('a2', 2), ('a10', 333), ('a11', 4456)])
or
{'a1': 123, 'a2': 2, 'a10': 333, 'a11': 4456}
Run Code Online (Sandbox Code Playgroud)
谢谢.
你很幸运:该natsort模块可以提供帮助.首先,使用以下方法安装:
pip install natsort
Run Code Online (Sandbox Code Playgroud)
现在,你可以通过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)
Run Code Online (Sandbox Code Playgroud)
较短的版本涉及排序d.items()(从RomanPerekhrest的答案得到这个想法):
d_new = OrderedDict(natsort.natsorted(d.items()))
Run Code Online (Sandbox Code Playgroud)
d_new
OrderedDict([('a1', 123), ('a2', 2), ('a10', 333), ('a11', 4456)])
Run Code Online (Sandbox Code Playgroud)