Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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_Dictionary_Nested - Fatal编程技术网

对嵌套python字典进行排序

对嵌套python字典进行排序,python,dictionary,nested,Python,Dictionary,Nested,我想根据第三个dict中的起始值对嵌套字典中第一个字典中的键进行排序 我了解如何使用两层嵌套的python词汇表和lambda函数来实现这一点,但我没有找到解决问题的方法 我希望一级键列表按开始值排序: your_list = {'KEY3': {'foo':{'start':1,'stop':2}}, 'KEY2': {'bar':{'start':3,'stop':4}}, 'KEY1': {'foobar':{'start':2,'stop'

我想根据第三个dict中的起始值对嵌套字典中第一个字典中的键进行排序

我了解如何使用两层嵌套的python词汇表和
lambda
函数来实现这一点,但我没有找到解决问题的方法

我希望一级键列表按开始值排序:

your_list = {'KEY3': {'foo':{'start':1,'stop':2}},
            'KEY2': {'bar':{'start':3,'stop':4}},
            'KEY1': {'foobar':{'start':2,'stop':2}}}

KEY3 KEY1 KEY2

我不能用lambdas来做,但是用一个函数它可以工作

def func(key):
    for key2,value2 in your_list[key].iteritems():
        for key3, value3 in value2.iteritems():
             return value3

sorted(your_list,key=func)
此排序基于起始值[1,3,2] 输出:


字典没有一个开始的顺序…你如何准确地将它们分为两个级别…?你想要什么作为输出?如果第二个级别有多个键会发生什么?而且,你的分类依据也不清楚;您的输出顺序建议了
start
值,但在平局时是否使用了
stop
值?您仍然必须为每个第二级选择一个输出,即使每个第二级是随机的键值对:
lambda key:next(iter(yourlist[key].values())['start']
就可以了。我想要一级键列表,例如按开始值排序
下一步(iter(你的[key].values())
从嵌套字典(Python 2和3)中给出一个随机值。由于我无法发布答案,而你的答案越来越接近我的答案,我是否可以编辑一个小改动以供你批准,@J.Goedhart?确定要更改什么?我将第一个dict转换为[(k,extract_third_level(v)),用于数据中的k,v。iteritems()],并使用helper函数明确排序依据。这就产生了一个OP已经解决的更简单的问题。现在已经被接受了。虽然我觉得还是有问题。
['KEY3', 'KEY2', 'KEY1']