[英]Python: sorting items in a dictionary by a part of a 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))
但是,由於羅馬數字是鍵的一部分,因此我的字母排序無法按預期工作。 我的問題是,我可以按鍵的一部分對字典進行排序嗎,例如,如果我的鍵是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]
。
要對其進行排序,可以執行以下操作:
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]
sorted_stuff將如下所示:
[(77, 'Mary XXIV', 24), (82, 'Robert III', 3)]
final_sorted將被正確格式化:
[('Mary XXIV', 24), ('Robert III', 3)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.