1

我正在使用 Python 2.5。我有一本字典,其中包含列表列表作为值

{'a': [['6', 3]], 'b': [['5', 1], ['6', 5]], 'c': [['446', 2],['6', 11],['67', 86]] }

我想按第一个列表项的第二个元素对其进行排序,因此,上面的排序如下:

'b': [['5', 1], ['6', 5]], 
'c': [['446', 2],['6', 11],['67', 86]]
'a': [['6', 3]]

有什么建议么?

谢谢斯科特

4

2 回答 2

4

字典本身是无序的,因此您无法对其本身进行排序。如果要创建键值对的排序列表,可以这样做:

sorted(myDict.iteritems(), key=lambda x: x[1][0][1])

iteritems返回一个可迭代的 (key, value) 对,所以x[1][0][1]这意味着“取该对的第二个元素(即值),并取其第一个元素(即列表列表中的第一个列表)并取其中的第二个元素 --- 换句话说,第一个列表中的第二个元素,这就是你想要的。

于 2012-11-20T20:36:53.103 回答
1

字典没有顺序。

但是,标准库中有一个名为collections.OrderedDict保留插入顺序的类。你可以像这样创建一个:

>>> collections.OrderedDict(sorted(myDict.iteritems(), key=lambda x: x[1][0][1])
OrderedDict([('b', [['5', 1], ['6', 5]]), ('c', [['446', 2], ['6', 11], ['67', 86]]), ('a', [['5', 4]])])

myDict.iteritems()返回 s 的序列(key, value) tuple。(您也可以使用items,它将序列作为列表而不是迭代器返回——但它可以在 Python 3 中工作,但iteritems不能。)

sorted按 对它们进行排序key

Thekey是一个函数,它value从其中一个tuples、that 的第二个元素value和第二个元素的第一个元素中获取,这是你想要排序的。

OrderedDictPython 2.5 中不存在该类,但它是在纯 Python 中实现的。如果您查看2.7的文档,有一个指向代码的链接,您可以将其复制并粘贴到您的 2.5 程序中。或者,您可以使用借用到标准库中的 ActiveState 配方,或者在 PyPI 上寻找一个模块来为您做这件事。

于 2012-11-20T20:40:52.513 回答