Python:基于子值对数组进行排序

时间:2014-01-08 18:46:05

标签: python python-2.7

我有以下数据结构:

[ 
    { some: thing9,
      key: 9,
    },
     { some: thing3,
      key: 3,
    },
    { some: thing2,
      key: 2,
    },
    { some: thing1,
      key: 1,
    }
]

如何根据字典的键值对此数组进行排序,以便我得到:

[ 
    { some: thing1,
      key: 1,
    },
     { some: thing2,
      key: 2,
    },
    { some: thing3,
      key: 3,
    },
    { some: thing9,
      key: 9,
    }
]

由于

2 个答案:

答案 0 :(得分:3)

sorted(data, key=operator.itemgetter('key'))

Sorting HOWTO更详细地解释了这一点。但基本思想是所有与排序相关的函数都采用key参数,这是一个在比较值之前应用于每个值的可调用函数。

因此,我们希望key获取您list的其中一个元素,并返回您想要排序的内容。元素为dict s,您希望按其key项进行排序。 itemgetter函数完全符合您的要求。 (如果该功能不可用,您可以使用,例如,lambda item: item['key']。)

答案 1 :(得分:2)

如果您更喜欢使用lambda表达式,这也是解决问题的合适方法:

sorted(data, key=lambda x: x['key'])

所以:

from pprint import pprint

data = [
    { 'some': 'thing9',
      'key': 9,
    },
    { 'some': 'thing3',
      'key': 3,
    },
    { 'some': 'thing2',
      'key': 2,
    },
    { 'some': 'thing1',
      'key': 1,
    }
]

pprint(sorted(data, key=lambda x:x['key']))

输出

[{'key': 1, 'some': 'thing1'},
 {'key': 2, 'some': 'thing2'},
 {'key': 3, 'some': 'thing3'},
 {'key': 9, 'some': 'thing9'}]