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

2024-10-01 04:51:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

d = {'Zemco III': 3, 'Usamec XL': 40, 'Usamec VII': 7, 'Robert VIII': 8, 'Usamec XLII': 42, 'Mary XXIV': 24, 'Robert III': 3, 'Robert XV': 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,我可以用某种方式对我的条目进行排序吗键。拆分()[0]而不是整个密钥?谢谢!在


Tags: key排序字母operatorrobertiiisorted罗马数字
2条回答

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)]

如果使用Python3,请使用key

^{pr2}$

对于多单词名称,key.rsplit(None, 1)[0]key.split()[0]好。在

要将其分类,可以执行以下操作:

sorted_stuff = sorted([(ord(x[0]), x, y) for x, y in d.items()])
final_sorted = [(y,z) for x,y,z in sorted_stuff]

排序后的内容将如下所示:

^{pr2}$

最终排序的将正确格式化:

[('Mary XXIV', 24), ('Robert III', 3)]

相关问题 更多 >