1

辞書をソートする方法を探していたところ、SO スレッドで次のコードに出会いました。

import operator
x = {1: 2, 3: 4, 4:3, 2:1, 0:0}
sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1))

このコードはどのように機能しますか? 辞書に対して iteritems() を呼び出すと、次のようになります。

<dictionary-itemiterator object at 0xf09f18>

参考になるとは思いますが、いかがでしょうか?そして、afaik、sorted(a,b) では、ソートしたいものであると想定されており、b は正しくソートするための指標になりますか? itemgetter(1) はここでどのように機能しますか?

4

3 に答える 3

0

リストまたはリストのようなオブジェクトを扱うほとんどの python ビルトインもイテレータを受け入れます。これらはリストへのポインタのようなもので、next() メンバー関数を使用してリスト内の次の項目に進むことができます。これは、無限リストまたは非常に大きなリスト (多くの要素または非常に大きな要素のいずれか) でメモリ使用量を抑えるのに非常に便利です。http://docs.python.org/library/stdtypes.html#iterator-typesを参照してください

iteritems() は、ディクショナリ内のアイテムのリストにイテレータを提供します。

于 2012-10-09T02:46:00.313 に答える
0

operator.itemgetter(1)と同等lambda x: x[1]です。1入力のインデックスで値を返す関数を指定する効率的な方法です。

.iteritems()(key,value)タプル形式のディクショナリ内のエントリに対するイテレータを返すディクショナリのメソッドです。

于 2012-10-09T02:35:04.937 に答える
0
  • iteritems()items()リストではなくイテレータを返すことを除いて、と同じです。大規模なディクショナリの場合、最初にメモリ内の項目の完全なリストを作成しなくても、個々の要素を反復処理できるため、これによりメモリが節約されます。
  • sortedkey何かを並べ替えるときに何を比較するかを決定するために使用される関数であるキーワード引数を受け入れます。この場合、それは usingoperator.itemgetterです。これは、doing の関数バージョンのようなものsomething[1]です。したがって、コードは、[1]によって返されたタプルの項目 (items()ディクショナリに格納された値) でソートしています。
于 2012-10-09T02:36:04.317 に答える