在Python中对字典键进行字母数字排序
我有一个字典,里面的键像是 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 函数的用法(使用“自然顺序”算法对列表进行排序)。