簡體   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