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

6 python sorting dictionary key

假设我有一个国王字典,其名称中包含罗马数字作为键,罗马数字以整数形式表示为值.

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))
Run Code Online (Sandbox Code Playgroud)

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

Pav*_*sov 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)]
Run Code Online (Sandbox Code Playgroud)

如果您使用 python 3,请使用以下命令key

lambda item: (item[0].rsplit(None, 1)[0], item[1])
Run Code Online (Sandbox Code Playgroud)

 

key.rsplit(None, 1)[0]key.split()[0]比多单词名称的情况要好。