在python自定义排序词典列表
说我有这样类型的字典列表:在python自定义排序词典列表
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'] })
但我不知道是否有更好的方法。尝试修改一些列表理解,但我还没有得到任何工作。任何想法赞赏!
对于整理列表,我建议使用内置的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
功能快得多。
超酷!谢谢! – tarponjargon
你必须定义一个比较函数并调用排序()是这样的:
sorted_sizes = sorted(sizes, cmp=compFunc)
compFunc()可能是这样的:
def compFunc(item1, item2) :
size_map = ['S', 'M', 'L', 'XL', 'XXL', 'XXXL']
if size_map.index(item1['key']) > size_map.index(item2['key']) :
return 1
elif size_map.index(item1['key']) < size_map.index(item2['key']) :
return -1
else :
return 0
对于内置的分类功能()请参见here
'cmp'已被弃用。使用'键' –
看看这个小提琴是否适合您的需求 - https://repl.it/Epi9 – marmeladze
这个效果很好!谢谢你这样做 – tarponjargon