[英]How to sort a list of dictionaries by 2 keys, one of which is based on an arbitrary list
我正在使用python。 如何首先按“天”然后按“工作”對字典列表進行排序。
“工作”的排序需要基於priority_list(而不是按字母順序):
priority_list= ['c','a','b']
my_list_of_dicts = [
{'day':5,'job':'c','irrelevant_key':'more stuff'},
{'day':1,'job':'a','irrelevant_key':'stuff'},
{'day':5,'job':'b','irrelevant_key':'more stuff'},
{'day':1,'job':'b','irrelevant_key':'other stuff'}
]
排序結果應為:
[{'day':1,'job':'a','irrelevant_key':'stuff'},
{'day':1,'job':'b','irrelevant_key':'other stuff'},
{'day':5,'job':'c','irrelevant_key':'more stuff'},
{'day':5,'job':'b','irrelevant_key':'more stuff'}]
非常感謝,
def key(d):
return d['day'], priority_list.index(d['job'])
sorted(my_list_of_dicts, key=key)
my_list_of_dicts.sort(key=lambda x: (x['day'], priority_list.index(x['job'])))
對於一個很小的列表(例如您的示例),使用list.index()
的答案會很好地工作。
但是,如果列表很大,則值得花時間在priority_list
構建dict
。 dict
查找為O(1), list
查找為O(N)。
priority_dict = dict((x, i) for i, x in enumerate(priority_list))
def key_day_priority(d):
return d['day'], priority_dict[d['job']]
my_list_of_dicts.sort(key=key_day_priority)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.