1

我有一个 python 字典,其键具有以下模式

<some x number of digits/alphabets> <some y number of alphabets><some z number of digits>

我想根据这个键对字典进行排序。例如

01IB0610, 01IB062, 01IB064

应该01IB062, 01IB064 01IB0610

完整的例子是这样的:

{ '01IB0610' : {'a' : [] , 'b': [] }, '01IB062' : {'a' : [] , 'b': [] } , '01IB064' : {'a' : [] , 'b': [] }

最终输出应该是:{ '01IB062' : {'a' : [] , 'b': [] }, '01IB064' : {'a' : [] , 'b': [] } , '01IB0610' : {'a' : [] , 'b': [] }

4

2 回答 2

3
import re

def key_func(s):
    return [int(x) if x.isdigit() else x for x in re.findall(r'\D+|\d+', s)]

sorted_keys = sorted(d, key=key_func)

例子:

>>> d = {'01IB0610': 'foo', '01IB062': 'bar', '01IB0604': 'baz'}
>>> sorted(d, key=key_func)
['01IB062', '01IB0604', '01IB0610']
于 2013-07-26T18:30:25.940 回答
0

我不确定我是否完全了解排序标准,但您可以使用 anOrderedDictdict保持特定顺序。

from collections import OrderedDict
import re
d = {'01IB0610': 1, '01IB062': 2, '01IB064': 3}

def criteria(x):
    number = int(re.sub('[^0-9]', '', x[0]) )
    length = len(x[0])
    return length, number
d = OrderedDict( sorted( d.items(), key = criteria ) )
d.keys()
>> ['01IB062', '01IB064', '01IB0610']

这将创建一个OrderedDict原始元素的顺序dict基于这些元素的键的分层排序的位置。第一个标准是密钥的长度,即因为它较长而01IB0610排在后面。01IB064第二个标准基于密钥中的数字,即01062before 01064

于 2013-07-26T19:27:21.503 回答