2015-06-08 259 views
0

比方說你有這樣的嵌套詞典:如何使用嵌套值對嵌套字典進行排序?

myDict = { 
      0: { 'bob': [1, 9, 4, 6, 7], 
       'jack': [2, 6, 9, 8, 5, 0]} 
      1: { 'dom': [1, 7, 8, 5], 
       'dean': [1, 9]} 
      } 

你怎麼樣myDict [0]由​​最大的最後三個值中的,所以輸出可以是這樣的(與傑克提前BOB):

插孔 - > 8

鮑勃 - > 7

預先感謝您

+1

你不*排序*字典,句點。 – deceze

+0

@deceze我認爲他是指字典中的列表值。 –

+0

@MalikBrahimi但價值也是字典。 – SuperBiasedMan

回答

-2

字典是由鍵的訪問,喲你不能用python對它們進行排序。但是,您可以提取數據並將其放入列表中 - 之後,對數據進行排序相當容易!

myDict = { 
      0: { 'bob': [1, 9, 4, 6, 7], 
       'jack': [2, 6, 9, 8, 5, 0]} 
      1: { 'dom': [1, 7, 8, 5], 
       'dean': [1, 9]} 
      } 

例如,你可以這樣做:

list_one = (myDict[0]['bob'][-3:]) 

如果你想最大的最後三個值:

greatest = list.sort(list_one)[-1] #gets the last value 
+0

除非重新序列化數據,否則這個要求是不可能的。獲取列表值並獲取最大值將是第一個幾步。 – Kris

1

一個解決方案是使用一個orderd詞典:

from collections import OrderedDict 

def my_ordered_dict(d): 
    return OrderedDict(sorted(d.items(), 
           key=lambda t: max(t[1][-3:]), 
           reverse=True)) 
myDict = { 
     0: my_ordered_dict({'bob': [1, 9, 4, 6, 7], 
          'jack': [2, 6, 9, 8, 5, 0]}), 
     1: my_ordered_dict({'dom': [1, 7, 8, 5], 
          'dean': [1, 9]}) 
      } 

print myDict[0] 
print myDict[1] 

輸出:

OrderedDict([('jack', [2, 6, 9, 8, 5, 0]), ('bob', [1, 9, 4, 6, 7])]) 
OrderedDict([('dean', [1, 9]), ('dom', [1, 7, 8, 5])]) 

請注意,在第二種情況下dean出頭的dom即使它的名單隻有兩個元素。

-1

代碼:

myDict = { 
      0: { 'bob': [1, 9, 4, 6, 7], 
       'jack': [2, 6, 9, 8, 5, 0]}, 
      1: { 'dom': [1, 7, 8, 5], 
       'dean': [1, 9]} 
      } 
myDict[0] = sorted(myDict[0].items(),key=lambda (k,v) : max(v[-3:]),reverse=True) 
print(myDict) 

輸出:

{0: [('jack', [2, 6, 9, 8, 5, 0]), ('bob', [1, 9, 4, 6, 7])], 1: {'dean': [1, 9], 'dom': [1, 7, 8, 5]}} 

說明:
轉換myDict [0]至(鍵,值)對&然後通過對其進行排序值列表中最後3個元素的最大值。

+0

謝謝,我明白爲什麼會這樣,但是我一直在用'('('(k,v)''部分)語法錯誤? – Aweys

+0

@Aweys剛剛嘗試過,沒有任何錯誤,請點擊這裏查看: [ideone](https://ideone.com/nmAbJ6) –

+0

我這樣做了,但它不起作用:'對於排序後的鍵(myDict [0] .items(),key = lambda(k,v): max(v [-3:0]),reverse = True):print('%s:%s'%(key,myDict [0] [key]))' – Aweys