访问python中的字典列表并使用值对其进行排序(嵌套字典)

时间:2015-10-19 02:56:18

标签: python list python-2.7 sorting dictionary

我有一个包含50个字典的列表,并希望按照' Key2'的值排序。那本字典

list1= [{'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]} ,
        {'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]}]

Key2可以通过以下方式静态访问:

>>>print list1[0]['outside_key1'][0]['key2']
   xyz

现在根据' key2'进行排序喜欢:

sorted_list = sorted(list1, key=lambda k: k[???])

最终按值排序变为:

[{'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]} ,
 {'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]}]

所以我的问题:
1.我如何动态访问' Key2'?的价值 2.如何根据' Key2'?

的值对字典列表进行排序

2 个答案:

答案 0 :(得分:1)

list1= [{'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]} ,
        {'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]}]
sort_on = "key2"
decorated = [(dict_.values()[0][0][sort_on], dict_) for dict_ in list1]
decorated.sort()
result = [dict_ for (key, dict_) in decorated]
print result

dict_.values()获取外部dic值,第一个[0]获取outside_key1的值,第二个[0]获取内部列表的第一个值。

  

这是最快的方法,因为它避免使用自定义比较功能,而是使用内置比较。您可以从Sorting Lists of Dictionaries

获取更多信息

答案 1 :(得分:0)

假设每个词典只有一个键,您可以执行以下操作:

sorted(list1, key=lambda d: d[next(iter(d))][0]['key2'])

此处:d[next(iter(d))]将提供与d相关联的第一个键的值。当然,词典是无序的,所以"首先" key只有在dict中只有一个键值对时才有意义...

FWIW,您的数据结构似乎真的在这里妨碍了一个干净的解决方案。看起来像dict的平面列表将是存储数据的更好方法:

list1 = [
    {'key1': 'one', 'key2': 'abc', 'key3':'three'},
    { 'key1': 'one', 'key2': 'xyz','key3':'three'},
]

因为只有一个值而且只有一个值的列表倾向于使容器有点过分。