如何通过嵌套值对嵌套字典进行排序?

时间:2015-06-08 15:31:20

标签: python sorting dictionary

假设你有这个嵌套词典:

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之前使用千斤顶):

jack - > 8

bob - > 7

提前谢谢

3 个答案:

答案 0 :(得分:1)

一种解决方案是使用有序字典:

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]

OUPUTS:

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 :(得分:-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个元素的最大值对其进行排序。

答案 2 :(得分:-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