Python 已排序的dict to list

Python 已排序的dict to list,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,我有这个: dictionary = { (month, year) : [int, int, int] } 我想得到一个元组/列表,其中包含有序数据(按月份和年份): 我试了好几次,但都找不到解决办法 谢谢您的帮助。不要使用内置名称作为您的标识符——这是一种可怕的做法,没有任何好处,最终会让您陷入一些奇怪的错误行为。因此,我调用结果列表(一个任意的、无痛的、很好的标识符),而不是列表(隐藏一个内置的) 像这样的事情应该可以完成工作: >>> d = { (8, 2010)

我有这个:

dictionary = { (month, year) : [int, int, int] }
我想得到一个元组/列表,其中包含有序数据(按月份和年份):

我试了好几次,但都找不到解决办法


谢谢您的帮助。

不要使用内置名称作为您的标识符——这是一种可怕的做法,没有任何好处,最终会让您陷入一些奇怪的错误行为。因此,我调用结果
列表
(一个任意的、无痛的、很好的标识符),而不是
列表
(隐藏一个内置的)


像这样的事情应该可以完成工作:

>>> d = { (8, 2010) : [2,5,3], (1, 2011) : [6,7,8], (6, 2010) : [11,12,13] }
>>> sorted((i for i in d.iteritems()), key=lambda x: (x[0][1], x[0][0]))
[((6, 2010), [11, 12, 13]), ((8, 2010), [2, 5, 3]), ((1, 2011), [6, 7, 8])]
(假设lambda应该先按年排序,然后按月排序。)


有关如何使用
itemgetter
解决此问题,请参阅Alex Martelli的更好答案。

这是一种非常简洁的方法,可以满足您的要求

l = [(m, y) + tuple(d[(y, m)]) for y, m in sorted(d)]

这给出了一个比OP要求的更深入的缩进列表,而我的a给了他一个简单的元组列表作为示例(并且作为奖励,避免了对
lambda
;-)的任何需要。@Alex:很好的观点:-)我在我的答案中引用了你的答案。谢谢你一如既往地分享你的专业知识。谢谢你的帮助,亚历克斯,我真的很感激。我在代码中没有使用标识符“dictionary”和“list”,为了清楚起见,我在示例中使用了它们:)。看来我失败了。@mfalcon,不客气<代码>字典过去和现在都很好。。。正是
列表
作为用户选择的标识符,给我敲响了警钟(不幸的是,许多内置名称,如
文件
元组
排序
类型
unicode
属性
范围
,…,都是“吸引人的骚扰”在引诱粗心的人去做不靠谱的事时,也要做一些好的、普通的、有吸引力的、描述性的英语单词——所以这是一个经常出现的问题,任何经常试图帮助新手的人都会变得非常敏感;-)。
>>> d = { (8, 2010) : [2,5,3], (1, 2011) : [6,7,8], (6, 2010) : [11,12,13] }
>>> sorted((i for i in d.iteritems()), key=lambda x: (x[0][1], x[0][0]))
[((6, 2010), [11, 12, 13]), ((8, 2010), [2, 5, 3]), ((1, 2011), [6, 7, 8])]
l = [(m, y) + tuple(d[(y, m)]) for y, m in sorted(d)]