1

Python2.5を使用しています。リストのリストを値として持つ辞書があります

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

最初のリストアイテムの2番目の要素で並べ替えたいので、上記は次のように並べ替えられます。

'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(キー、値) ペアの iterable を返すので、x[1][0][1]「このペアの 2 番目の要素 (値) を取得し、その最初の要素 (リストのリストの最初のリスト) を取得して取得する」という意味があります。その 2 番目の要素 --- つまり、最初のリストの 2 番目の要素であり、これが必要です。

于 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()のシーケンスを返します(key, value) tupleitems(イテレータの代わりにシーケンスをリストとして返すを使用することもできますが、Python 3では機能しますが、機能しiteritemsません。)

sortedそれらを。で並べ替えますkey

は、これらの1つ、その2番目の要素、およびその2番目の要素の1番目の要素からkey取得する関数です。これは、並べ替えたいものです。valuetuplevalue

このOrderedDictクラスはPython2.5には存在しませんが、純粋なPythonで実装されています。2.7のドキュメントを見ると、コードへのリンクがあり、2.5プログラムにコピーして貼り付けることができます。または、標準ライブラリに借用されたActiveStateレシピを使用するか、PyPIでそれを実行するモジュールを探すことができます。

于 2012-11-20T20:40:52.513 に答える