我有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”的值对字典列表进行排序?

最佳答案

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获取更多信息

10-07 16:26
查看更多