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

发布于 2024-12-17 02:31:13 字数 623 浏览 1 评论 0原文

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

非常感谢,

I'm using python.
How do I sort the list of dictionaries below first by 'day' then by 'job'.
The sort on 'job' needs to be based on priority_list (not alphabetically):

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'}
]

result of sorting should be:

[{'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'}]

Thanks very much,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼睛会笑 2024-12-24 02:31:14

对于非常小的列表(例如您的示例),使用 list.index() 的答案将可以正常工作。

但是,如果列表很大,则值得花时间从 priority_list 构建一个 dictdict 查找的时间复杂度为 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)

For a very small list, such as your example, the answers using list.index() will work fine.

However, if the list is large, it would be worth the time to build a dict out of the priority_list. dict lookups are O(1), while list lookups are 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)
独夜无伴 2024-12-24 02:31:13
my_list_of_dicts.sort(key=lambda x: (x['day'], priority_list.index(x['job'])))
my_list_of_dicts.sort(key=lambda x: (x['day'], priority_list.index(x['job'])))
蓬勃野心 2024-12-24 02:31:13
def key(d):
    return d['day'], priority_list.index(d['job'])

sorted(my_list_of_dicts, key=key)
def key(d):
    return d['day'], priority_list.index(d['job'])

sorted(my_list_of_dicts, key=key)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文