假设我有一个国王的字典,其中以罗马数字作为键,以整数形式表示的罗马数字作为值。
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,是否可以使用key.split()[0]而不是整个密钥来对项目进行排序?谢谢!
sorted(d.items(), key=lambda (num,name): (num,name.rsplit(None, 1)[0]))
但是怎样加入类似key=operator.itemgetter(1)
的内容呢?谢谢。 - user2821275(name.rsplit(None, 1)[0], num)
。只有lambda
参数的顺序会改变。如果您仍然需要拆分名称,则itemgetter
没有帮助。您的反转字典如何处理重复的数字? - Pavel Anossov