2013-09-22 56 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

相關問題