我正在使用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'}]
非常感谢,
答案 0 :(得分:3)
def key(d):
return d['day'], priority_list.index(d['job'])
sorted(my_list_of_dicts, key=key)
答案 1 :(得分:3)
my_list_of_dicts.sort(key=lambda x: (x['day'], priority_list.index(x['job'])))
答案 2 :(得分:2)
对于一个非常小的列表,例如您的示例,使用list.index()
的答案可以正常工作。
但是,如果列表很大,则值得花时间从dict
构建priority_list
。 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)