如何通过2个键对字典列表进行排序,其中一个键基于任意列表

时间:2011-11-19 02:14:37

标签: python list sorting dictionary

我正在使用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'}]

非常感谢,

3 个答案:

答案 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_listdict查找为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)