2016-03-04 75 views
1

Python:Python:在字典中排序值?

x = {2:[40,30],3:[24,16],4:[30,2],5:[0,80],6:[19,8]} 

,我需要基於價值 的第一個項目進行排序的字典,所以我的結果應該是

{2:[40,30],4:[30,2],3:[24,16],6:[19,8],5:[0,80]} 
+1

[Python:List to Dictionary]的可能重複(http://stackoverflow.com/questions/4576115/python-list-to-dictionary) – konkked

回答

2

只需將其傳遞到dict()

>>> dict([(2, [40, 30]), (4, [30, 2])]) 
{2: [40, 30], 4: [30, 2]} 

字典不關心它們的值在什麼順序:

>>> {'one': 1, 'two': 2} == {'two': 2, 'one': 1} 
True 

如果你想維持秩序,您可以使用collections.OrderedDict

>>> from collections import OrderedDict 
>>> OrderedDict([(2, [40, 30]), (4, [30, 2])]) 
OrderedDict([(2, [40, 30]), (4, [30, 2])]) 
+0

但如果我有x = [(4,[30,2] ),(2,[40,30])]在調用字典(x)我會得到{2:[40,30],4:[30,2]}但我想這樣的方式應答的順序應該不會被改變,我應該得到{4:[30,2],2:[40,30]} – FryMan

+0

@SagarR,我已經添加了一個使用'collections.OrderedDict'的例子,它關心元素的順序(不像'dict')。 – Chris

+0

如果我有x = {2:[40,30],3:[24,16],4:[30,2],5:[0,80],6:[19,8]}我需要根據值中的第一項對字典進行排序,所以我的結果應該是{2:[40,30],4:[30,2],3:[24,16],6:[19,8 ],5:[0,80]} – FryMan

3

所有你需要的是使用dict

d = dict(x) 

做到,因爲你list已經在正確的格式是很容易轉換爲Dictionary,也就是說,您已經有一個key-value元組對作爲您的列表元素。

+0

但如果我有x = [(4,[30,2]),(2,[40,30])]調用字典(x)我會得到{2:[40 ,30],4:[30,2]}但是我想要這樣一個順序不應該改變的答案,我應該得到{4:[30,2],2:[40,30]} – FryMan

+2

@SagarR不幸的是,'Dictionary'沒有'Order'的概念。 '訂單'是'list'中的概念。字典以「Key-Value」對概念運行。您使用密鑰並獲得價值,這就是爲什麼它是無序的。另一個原因是這樣做是爲了在內部獲得一些性能優勢。您需要找到適合您使用的正確工具。如果您需要訂購,請使用'List',不要使用'Dict'。如果你需要鍵值對,使用'dict'。如果你同時需要,那麼你可以創建兩個東西 - 沿這條線 – Ian

+0

這是可能的,如果我有x = {2:[40,30],3:[24,16],4:[30,2],5 :[0,80],6:[19,8]}我需要根據值中的第一項對字典進行排序,所以我的結果應該是{2:[40,30],4:[30,2] ,3:[24,16],6:[19,8],5:[0,80]} – FryMan

1

你沒有明確的問你的問題,而是從你對其他答案的評論中想要以字典形式保存列表的順序。標準字典本質上是無序的,但是,你可以使用OrderedDict代替:

from collections import OrderedDict 

x = [(4, [30, 2]), (2, [40, 30])] 
d = dict(x) 
print(d) 
# {2: [40, 30], 4: [30, 2]} 

d = OrderedDict(x) 
print(d) 
# OrderedDict([(4, [30, 2]), (2, [40, 30])]) 

這將保留除了字典的順序按鍵。