根据键以自然顺序对OrderedDict条目进行排序

时间:2019-08-13 22:00:39

标签: python

OrderedDict保留将条目插入字典的顺序。给定OrderedDict,例如:

{'a1': 1, 'a2':2, 'a14': 14, 'a3': 3}

可以通过以下方式获取字母数字顺序:

new_dic=OrderedDict(sorted(dic.items()))

 {'a1': 1, 'a14': 14, 'a2': 2, 'a3':3}

但是,是否可以按照键以自然顺序对条目进行排序,使得结果为:

{'a1': 1, 'a2': 2, 'a3': 3, ..., 'a14': 14}

其目的是我只想提取字典的值,但是应该根据键的自然顺序来提取值。

2 个答案:

答案 0 :(得分:0)

尝试一下:

d = {'a1': 1, 'a14': 14, 'a3': 3, 'a2':2}
OrderedDict(sorted(d.items(), key=lambda (k, _): (k[0], int(k[1:]))))

=> OrderedDict([('a1', 1), ('a2', 2), ('a3', 3), ('a14', 14)])

答案 1 :(得分:-1)

# you could create a new dictionary: 
import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    '''
    alist.sort(key=natural_keys) sorts in human order
    http://nedbatchelder.com/blog/200712/human_sorting.html
    (See Toothy's implementation in the comments)
    '''
    return [ atoi(c) for c in re.split(r'(\d+)', text) ]

test = {'a1': 1, 'a14': 14, 'a3': 3, 'a2':2}
new_dict = {}
for k in sorted(test.keys(),key=natural_keys):
    new_dict[k] = test[k]

即使字典有多个字符,也可以进行排序。来自How to correctly sort a string with a number inside?

的帮助