gpt4 book ai didi

Python:按键的一部分对字典中的项目进行排序?

转载 作者:太空狗 更新时间:2023-10-30 00:15:01 26 4
gpt4 key购买 nike

假设我有一本国王字典,以他们名字中的罗马数字作为键,以整数形式的罗马数字作为值。

d = {'Zemco III': 3, 'Usamec XL': 40, 'Usamec VII': 7, 'Robert VIII': 8, 'Usamec XLII': 42, 'Mary XXIV': 24 , '罗伯特三世': 3, '罗伯特十五': 15, 'Usamec XLIX': 49}

我想按从旧到新的顺序对列表进行排序,即 Usamec XLII 应该排在 Usamec XLIX 之前。我还想按字母顺序对列表进行排序,即 Usamec XLII 应该排在 Zemco III 之前。

我的方法是先按名称排序,然后按罗马数字值排序:

x = sorted(d.items(),key=operator.itemgetter(0))
y = sorted(x,key=operator.itemgetter(1))

但是,因为罗马数字是键的一部分,所以我的字母排序不能按预期工作。我的问题是,我可以按键的一部分对字典进行排序吗,例如,如果我的键是 Zemco III,我可以用 key.split()[0] 而不是整个键以某种方式对我的项目进行排序吗?谢谢!

最佳答案

key 只是一个接收项目并返回您需要排序的内容的函数。它可以是任何东西。

这按 (name_without_rightmost_word, number) 键对项目进行排序:

In [92]: sorted(d.items(), key=lambda (name, num): (name.rsplit(None, 1)[0], num))
Out[92]:
[('Mary XXIV', 24),
('Robert III', 3),
('Robert VIII', 8),
('Robert XV', 15),
('Usamec VII', 7),
('Usamec XL', 40),
('Usamec XLII', 42),
('Usamec XLIX', 49),
('Zemco III', 3)]

如果您使用 python 3,请使用此 key:

lambda item: (item[0].rsplit(None, 1)[0], item[1])

key.rsplit(None, 1)[0] 在多词名称的情况下优于 key.split()[0]

关于Python:按键的一部分对字典中的项目进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com