说我有一个像这样的词典列表:
sizes = [
{
'doc_count': 86,
'key': 'M'
},
{
'doc_count': 85,
'key': 'XL'
},
{
'doc_count': 84,
'key': 'L'
},
{
'doc_count': 84,
'key': 'XXL'
},
{
'doc_count': 66,
'key': 'S'
},
{
'doc_count': 66,
'key': 'XXXL'
}
]
根据预定义列表对其进行排序的最有效方法是:'S'
,'M'
,'L'
,'XL'
,'XXL'
? (也许它比排序更“订购”)
我知道我可以做类似的事情:
new_list = []
size_map = ['S','M','L','XL','XXL','XXXL']
for size in size_map:
for i in range(len(sizes)):
if size in sizes[i].values():
new_list.append( { 'key': size, 'doc_count': sizes[i]['doc_count'] } )
但我想知道是否有更好的方法。尝试修改一些列表理解,但我还没有得到任何工作。任何想法都赞赏!
答案 0 :(得分:3)
对于排序列表,我建议使用内置sorted()
函数或列表方法list.sort()
。要指定非标准排序顺序,请使用key=
关键字:
size_map = {'S':1,'M':2,'L':3,'XL':4,'XXL':5,'XXXL':6}
new_list = sorted(sizes, key=lambda x:size_map[x['key']])
或者,您可以使用原始size_map
列表的索引作为排序键:
size_map = ['S','M','L','XL','XXL','XXXL']
new_list = sorted(sizes, key=lambda x:size_map.index(x['key']))
但是,对于足够大的size_map
数组,使用dict
会更快。
请注意,the Python documentation鼓励使用key=
代替cmp=
:
通常,
key
和reverse
转换过程比指定等效的cmp
函数要快得多。
答案 1 :(得分:0)
您必须定义比较函数并调用sorted(),如下所示:
whereRaw
compFunc()可能是这样的:
sorted_sizes = sorted( sizes, cmp=compFunc )
对于内置函数 sorted(),请参阅here