簡體   English   中英

使用Python中的值對字典的字典進行排序

[英]Sorting a dictionary of dictionary using values in Python

如何在python中對字典進行排序?

我有一本字典:

d =     {
       1: {2: 30, 3: 40, 4: 20, 6: 10},
       2: {3: 30, 4: 60, 5: -60}, 
       3: {1: -20, 5: 60, 6: 100}, 
       }

如何獲得基於其值的排序(反向)字典? 我如何獲得如下輸出:

d = {
           1: {3: 40, 2: 30, 4: 20, 6: 10},
           2: {4: 60, 3: 30, 5: -60}, 
           3: { 6: 100, 5: 60,1: -20}, 
  }

如果要訂購,則需要一個OrderedDicts的OrderedDict,偶然地,外部dict處於排序順序,但普通dict沒有順序:

from collections import OrderedDict

d =     {
       1: {2: 30, 3: 40, 4: 20, 6: 10},
       2: {3: 30, 4: 60, 5: -60},
       3: {1: -20, 5: 60, 6: 100},
       }
keys = sorted(d.keys()) # sort outer dict keys
o = OrderedDict()
for k in keys: # loop over the sorted keys
    # make an orderedDict out of the sorted items from each sub dict.
    o[k] = OrderedDict((k,v) for k,v in sorted(d[k].items(),key=lambda x:x[1],reverse=True))
print(o)

OrderedDict([(1, OrderedDict([(3, 40), (2, 30), (4, 20), (6, 10)])), (2, OrderedDict([(4, 60), (3, 30), (5, -60)])), (3, OrderedDict([(6, 100), (5, 60), (1, -20)]))])

Padraic所做的事情更加緊湊:

sort_vals = lambda d: OrderedDict(sorted(d.items(), key=lambda pair: pair[1], reversed=True))

d = dict((k, sort_vals(sub_dict)) for k, sub_dict in d.items())

(未測試)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM