对嵌套python字典进行排序
我想根据第三个dict中的起始值对嵌套字典中第一个字典中的键进行排序 我了解如何使用两层嵌套的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'
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']