6

これは基本的に反復を行うサンプルコードです。

>>> d = {'lol': {'12': '3',  '35':''}, 'w': {'12': '3', '35':''}}

>>> def iteritems(s):
...     keys = s.keys()
...     for key in keys:
...             yield key, s[key]
... 
>>> for k, v in iteritems(d):
...     print k, v
... 
w {'12': '3', '35': ''}
lol {'12': '3', '35': ''}

これは有効なジェネレーターです。ただし、ジェネレーターは、辞書内のすべてのキーをキャッシュするiteritemsために呼び出す必要があります。s.keys()ディクショナリが大きい場合 (100 項目以上)、メモリ効率が良くありません。

しかし、ディクショナリは順序付けられた構造ではないため、キーのリストを取得する必要があると思います。

キーの数は、キーと値を数えるアイテムの数よりもはるかに少ないと主張する人もいるかもしれません。

なにか提案を?または、より良い方法です(もちろん、ネストされた反復をサポートする必要がありますが、それは別のことです)。

4

3 に答える 3

11

.iterkeys()Python 2.x で使用します。Python 3.x では.keys()、ビューであり、新しいリストではありません。Python 2.7 では、viewkeys()メソッドを使用して同じことを取得することもできます。

同等の.iteritems()メソッドがあり、ユーティリティ メソッドが冗長になります。:-) Python 3.x と 2.7 にも同じことが当てはまります。付属のドキュメントを参照してください。

于 2012-09-04T19:57:43.523 に答える
3

Python 2.x で中間リストを作成しないようにするには、次のようにします。

for k, v in d.iteritems():
    print k, v

Python 3.x では、次を使用します。

for k, v in d.items():
    print(k, v)

そのバージョンのメソッドは反復可能なビューオブジェクト.items()を返すためです。

于 2012-09-05T01:42:00.490 に答える