Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问python中的字典列表并使用值(嵌套字典)对其排序_Python_List_Python 2.7_Sorting_Dictionary - Fatal编程技术网

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

访问python中的字典列表并使用值(嵌套字典)对其排序,python,list,python-2.7,sorting,dictionary,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'}]}] 键2可以通过以下方式静态访问: >>>print list1[0]['outside_key1'][0]['

我有一个50个字典的列表,并希望按该字典的“Key2”值排序

list1= [{'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]} ,
        {'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]}]
键2可以通过以下方式静态访问:

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

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

sorted(list1, key=lambda d: d[next(iter(d))][0]['key2'])
此处:
d[next(iter(d))]
将给出与
d
相关联的第一个键的值。当然,字典是无序的,所以只有当字典中只有一个键值对时,“第一个”键才有意义


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

list1 = [
    {'key1': 'one', 'key2': 'abc', 'key3':'three'},
    { 'key1': 'one', 'key2': 'xyz','key3':'three'},
]
因为只有一个值的dict和只有一个值的list往往会使容器有点过度

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]获取外部按键1的值,第二个[0]获取内部列表的第一个值

这里是最快的方法,因为它避免了使用自定义比较函数,而不是使用内置比较。您可以从以下网站获得更多信息:


“外部”dict总是只有一个键吗?是的,外部dict总是只有一个键。这太完美了。非常感谢。:)