像這樣的數據結構。python:排序字典上的字典
{
'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}
}
什麼是排序的頂級字典的值內的count
價值的最佳方式是什麼?
像這樣的數據結構。python:排序字典上的字典
{
'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}
}
什麼是排序的頂級字典的值內的count
價值的最佳方式是什麼?
d = {'ford': {'count': 3},
'mazda': {'count': 0},
'toyota': {'count': 1}}
>>> sorted(d.items(), key=lambda (k, v): v['count'])
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]
爲了使結果作爲一個字典,你可以使用collections.OrderedDict
:
>>> from collections import OrderedDict
>>> ordered = OrderedDict(sorted(d.items(), key=lambda (k, v): v['count']))
>>> ordered
OrderedDict([('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})])
>>> ordered.keys() # this is guaranteed to come back in the sorted order
['mazda', 'toyota', 'ford']
>>> ordered['mazda'] # still a dictionary
{'count': 0}
版本的擔憂:
d.iteritems()
,而不是d.items()
更好內存效率collections.OrderedDict
僅適用於Python 2.7和Python 3.2(a nd higher)一個dicitonary是一個無序的數據結構,所以它不能被排序。你可以從你的字典d
創建一個排序列表(或者,在Python 2.7,一個OrderedDict
):
sorted(d.iteritems(), key=lambda item: item[1]["count"])
這個列表可以用作collections.OrderedDict
構造函數的參數。
更清晰的方法是使用itemgetter,然後使用該值構建一個有序的字典,如其他建議。
>>> from operator import itemgetter
>>> sorted(s,key=itemgetter,reverse=True)
['ford', 'toyota', 'mazda']
如果要排序的值一些項目字典,結果你不能保存爲一個字典,因爲字典中不保留的元素加入的順序。 Fot,你必須使用OrderedDict。一種解決方案是,一旦排序,就會從(鍵值)元組列表中生成一個OrderedDict。
>>> collections.OrderedDict(sorted(d.iteritems(),key=lambda x:x[1]["count"],reverse=True))
OrderedDict([('ford', {'count': 3}), ('toyota', {'count': 1}), ('mazda', {'count': 0})])
>>>
我覺得字典是哈希表,因此不能真正排序。嘗試存儲排序的值成一個列表,其中可以進行排序:
l = []
for x in sorted(dictionary.keys()):
l.append([dictionary[x]])
如果你真的想保持的鑰匙,也許它們添加到列表中也是如此。只要確保在訪問列表時,甚至索引(0,2,4,...)是鍵和奇數索引是值(1,3,5,...)
如果您有的字典是名爲x,那麼你可以得到一個鍵列表: sorted_x = sorted(x,key = lambda a:x [a] ['count']) where sorted_x is: ['mazda','toyota', '福特']
然後可以打印: 對於i在sorted_x: 打印X [I]
結果: { '計數':0} { '計數':1} {」算「: 3}
字典是一種無序的數據類型,它不能被排序。你可以使用'collections.OrderedDict'。 – 0xc0de 2012-04-09 17:04:40