基于键对Python字典进行排序?

6

我已经创建了一个Python字典,其键的形式如下:

11, 10, 00, 01, 20, 21, 31, 30

这些键是字符串。

我想要以这些排序方式来维护我的字典:

00, 10, 20, 30, 01, 11, 21, 31 

这是基于键的第二个值。

我尝试了这个sorted(dict.items(), key = lambda s: s[1]),得到了以下这些键:

20, 30, 21, 31, 01, 11, 10, 00

有人能指导我吗?


你考虑过使用OrderedDict吗? - kojiro
这个问题绝对是重复的。:) 我甚至数不清我看到它多少次了。 - Shashank
嗨。items返回一个元组列表,其中第一项是键,第二项是值。因此,如果您想按键排序,应该使用sorted(dict.items(), key = lambda s: s[0])但在这种情况下,您得到的是升序排列的键如果您想按照您的示例排序 11, 10, 00, 01, 20, 21, 31, 30
我想保持我的字典按这个顺序排序:
00, 10, 20, 30, 01, 11, 21, 31 您应该在排序函数中反转您的键 sorted(dict.items(), key = lambda s: ''.join(reversed(s[0])))
- oleg
2个回答

4
你差不多有了,但关键是元组的第一个项目:
sorted(dict.items(), key=lambda s: s[0])

2
我正在阅读“键的第二个值”可能是:s[0][1] - Jon Clements
@JonClements:啊,好的观点。谢谢。 - Ry-
同时使用 key=lambda (key, val): key[1] 也不会有什么坏处,这样可以更明确。 - Jon Clements
2
è؟™و—¶ه€™وœ‰و²،وœ‰ن؛؛ه»؛è®®ن½؟用operator.itemgetterو‌¥و‘†è„±lambdaçڑ„و··ن¹±ه‘¢ï¼ں :P - kojiro
1
@anu:在撰写该文时,dicts没有被排序。在Python 3.7中,您可以将此表达式包装在dict()中以再次获取一个dict。 - Ry-
显示剩余7条评论

0
一个字典使用了哈希表,因此它不能被排序。你可以使用 dict.keys().sort(key = lambda s: s[1]) 来进行迭代或者继续操作。

1
这不会做你期望的事情。.sort 方法应用于列表时是就地排序,而该列表是短暂的。下次获取 dict.keys() 时,它将不会被排序。它不会是同一个列表。 - kojiro
是的,你说得对!x = dict.keys() 然后 x.sort(...)。谢谢! - adarsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接