2015-06-08 264 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