在Python中对字典键进行字母数字排序

4 投票
3 回答
4498 浏览
提问于 2025-04-16 07:29

我有一个字典,里面的键像是 A1 到 A15,B1 到 B15 这样的。用 dictionary.keys().sort() 排序后,结果是 A1, A10, A11 ... 这样。

def sort_keys(dictionary):
    keys = dictionary.keys()
    keys.sort()
    return map(dictionary.get, keys)

我该怎么排序才能让它们按正确的顺序排列,也就是 A1, A2, A3 ... 这样呢?

3 个回答

0

你需要在2.7及以上版本中使用collections里的OrderedDict。

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
1

dictionary.keys() 会返回一个列表,你可以用自己的方法对这个列表进行排序:

>>> a = [(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]
>>> import operator
>>> a.sort(key = operator.itemgetter(1))
>>> a
[(u'.', '.'), (u'we', 'PRP'), (u'you', 'PRP'), (u'saw', 'VBD'), (u'bruh', 'VBP')]*
9
keys.sort(key=lambda k:(k[0], int(k[1:])) )

补充说明:如果键的格式不是像 A23 这样的,比如 AA12,就会导致程序出错。在一般情况下,可以参考 Python 中类似 natsort 函数的用法(使用“自然顺序”算法对列表进行排序)

撰写回答