繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM