按标签排序嵌套python字典

按标签排序嵌套python字典,python,Python,我正试图找到一种聪明的方法,按std对以下数据结构进行排序: {'4555':{'std':5656, 'var': 5664}, '5667':{'std':5656, 'var': 5664}} 理想情况下,我希望有一个排序字典(我知道很糟糕),或者一个排序元组列表,但我不知道如何在lambda表达式中获得“std”部分。我正在尝试以下内容,但是我应该如何以一种聪明的方式获得“stdev”位呢?我想给出一个元组列表(每个元组包含索引,如[(45555656),(56675656)] 输入列

我正试图找到一种聪明的方法,按std对以下数据结构进行排序:

{'4555':{'std':5656, 'var': 5664}, '5667':{'std':5656, 'var': 5664}}
理想情况下,我希望有一个排序字典(我知道很糟糕),或者一个排序元组列表,但我不知道如何在lambda表达式中获得“std”部分。我正在尝试以下内容,但是我应该如何以一种聪明的方式获得“stdev”位呢?我想给出一个元组列表(每个元组包含索引,如
[(45555656),(56675656)]


输入列表中的每个元素都是
(k,dictionary)
项的元组,因此您需要索引到该元组,以获得dictionary值中的
std
键:

sorted(sd_dict.items(), key=lambda i: i[1]['std'])
如果您只想从字典中获得一个包含键和
std
值的元组,则需要将它们挑选出来;排序之前或之后这样做并不重要,只需相应地调整排序键即可

sorted([(int(k), v['std']) for k, v in sd_dict.items()], key=lambda i: i[1])

但是,只提取一次
std
值,而不是同时用于排序和提取会更快。

因为
sd_dict.items()
返回一个元组列表,您不能再像在
key
函数中访问字典一样访问元素。相反,
key
函数获得一个两元素元组,第一个元素是键,第二个元素是值。因此,要获得
std
值,您需要如下访问它:

lambda x: x[1]['std']
但由于在您的示例中,两个值都是相同的,因此实际上您不会更改任何内容:

>>> list(sorted(sd_dict.items(), key=lambda x: x[1]['std']))
[('5667', {'var': 5664, 'std': 5656}), ('4555', {'var': 5664, 'std': 5656})]
如果只需要一对外部字典键和std值,则应首先使用列表理解来转换字典值:

>>> lst = [(key, value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: x[1])
>>> lst
[('5667', 5656), ('4555', 5656)]
或者,您可能希望包含int转换,也可以按键进行排序:

>>> lst = [(int(key), value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: (x[1], x[0]))
>>> lst
[(4555, 5656), (5667, 5656)]

预期的输出是什么?任务的无用示例(假设您发布的代码确实完成了任务)-std是相同的。我忘记了x[1]:(谢谢)。
>>> lst = [(key, value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: x[1])
>>> lst
[('5667', 5656), ('4555', 5656)]
>>> lst = [(int(key), value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: (x[1], x[0]))
>>> lst
[(4555, 5656), (5667, 5656)]