2013-09-22 58 views
2

我创建了具有键在这种形式的Python字典:基于密钥对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 

有人能指导我?

+0

你有没有考虑过使用[OrderedDict](http://docs.python.org/2/library/collections.html#collections.OrderedDict)? – kojiro

+0

这个问题绝对是重复的。 :)我甚至不能算我看过多少次。 – Shashank

+0

嗨。 'items'返回第一个元素是键的元组列表,第二个元素是值。所以,如果你想通过按键对它们进行排序,您应该使用 排序(dict.items(),键=拉姆达S:S [0]) 但在这种情况下,你有钥匙升序 如果您想排序为你的榜样 11,10,00,01,20,21,31,30 >我想保持我的字典在这些排序顺序: 00,10,20,30,01, 11,21,31 你应该扭转你的钥匙排序功能 排序(dict.items(),键=拉姆达S: ''。加入(逆转(S [0]))) – oleg

回答

1

你几乎拥有了,但关键是元组的第一项:

sorted(dict.items(), key=lambda s: s[0]) 
+2

我读的是第二 键的值“可能是:'s [0] [1]' –

+0

@JonClements:啊,好点。谢谢。 – Ryan

+0

也不会伤害使用'key = lambda(key,val):key [1]'只是为了使其明确 –

1

字典使用一种叫哈希,它不能被分类为这样的。你可以做的是使用dict.keys().sort(key = lambda s: s[1])并迭代或从那里继续。

+1

这不会做你期望的。列表的'.sort'方法在列表上就地运行,并且该列表是短暂的。下一次你得到dict.keys()它将不会被排序。它不会是*相同*列表。 – kojiro

+0

是的你是对的! 'x = dict.keys()'然后'x.sort(...)'谢谢! – adarsh

相关问题