[英]Sort a nested dictionary in Python
我有以下字典。
var = a = {
'Black': { 'grams': 1906, 'price': 2.05},
'Blue': { 'grams': 9526, 'price': 22.88},
'Gold': { 'grams': 194, 'price': 8.24},
'Magenta': { 'grams': 6035, 'price': 56.69},
'Maroon': { 'grams': 922, 'price': 18.76},
'Mint green': { 'grams': 9961, 'price': 63.89},
'Orchid': { 'grams': 4970, 'price': 10.78},
'Tan': { 'grams': 6738, 'price': 50.54},
'Yellow': { 'grams': 6045, 'price': 54.19}
}
如何根據price
對它進行排序。 因此,結果字典將如下所示。
result = {
'Black': { 'grams': 1906, 'price': 2.05},
'Gold': { 'grams': 194, 'price': 8.24},
'Orchid': { 'grams': 4970, 'price': 10.78},
'Maroon': { 'grams': 922, 'price': 18.76},
'Blue': { 'grams': 9526, 'price': 22.88},
'Tan': { 'grams': 6738, 'price': 50.54},
'Magenta': { 'grams': 6035, 'price': 56.69},
'Mint green': { 'grams': 9961, 'price': 63.89},
}
從訂購的項目元組列表構造一個OrderedDict
:
from collections import OrderedDict
ordered = OrderedDict(sorted(a.items(), key=lambda i: i[1]['price']))
( .items()
假定使用Python 3,在Python 2中iteritems
應該執行相同的操作。)
for s in sorted(a.iteritems(), key=lambda (x, y): y['price']):
print s
或按OrderedDict
from collections import OrderedDict
res = OrderedDict(sorted(a.items(), key=lambda x: x[1]['price'], reverse=False))
print res
輸出:
[('Black', {'price': 2.05, 'grams': 1906}), ('Gold', {'price': 8.24, 'grams': 194}), ('Orchid', {'price': 10.78, 'grams': 4970}), ('Maroon', {'price': 18.76, 'grams': 922}), ('Blue', {'price': 22.88, 'grams': 9526}), ('Tan', {'price': 50.54, 'grams': 6738}), ('Yellow', {'price': 54.19, 'grams': 6045}), ('Magenta', {'price': 56.69, 'grams': 6035}), ('Mint green', {'price': 63.89, 'grams': 9961})]
import collections
update=collections.OrderedDict()
result = sorted(a, key=lambda x: (a[x]['price']))
for r in result:
update[r]=a[r]
print(update)
from collections import OrderedDict
from operator import getitem
sorted_dict = OrderedDict(sorted(a.items(), key = lambda x:getitem(x[1],'price')))
print(sorted_dict)
輸出:
OrderedDict([('Black', {'grams': 1906, 'price': 2.05}), ('Gold', {'grams': 194, 'price': 8.24}), ('Orchid', {'grams': 4970, 'price': 10.78}), ('Maroon', {'grams': 922, 'price': 18.76}), ('Blue', {'grams': 9526, 'price': 22.88}), ('Tan', {'grams': 6738, 'price': 50.54}), ('Yellow', {'grams': 6045, 'price': 54.19}), ('Magenta', {'grams': 6035, 'price': 56.69}), ('Mint green', {'grams': 9961, 'price': 63.89})])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.