1101

Python 2.7では、辞書のkeysvalues、またはitemsをリストとして取得できました。

>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]

さて、Python >= 3.3では、次のような結果が得られます。

>>> newdict.keys()
dict_keys([1, 2, 3])

したがって、リストを取得するにはこれを行う必要があります。

newlist = list()
for i in newdict.keys():
    newlist.append(i)

Python 3でリストを返すより良い方法はありますか?

4

11 に答える 11

1370

試してみてくださいlist(newdict.keys())

dict_keysこれにより、オブジェクトがリストに変換されます。

一方で、それが重要かどうかを自問する必要があります。Pythonic のコーディング方法は、アヒルのタイピングを想定することです (アヒルのように見え、アヒルのように鳴く場合、それはアヒルです)。dict_keysオブジェクトは、ほとんどの目的でリストのように機能します。例えば:

for key in newdict.keys():
  print(key)

明らかに、挿入演算子は機能しない可能性がありますが、とにかく辞書キーのリストにはあまり意味がありません。

于 2013-05-29T16:25:40.847 に答える
29

「ダックタイピング」の定義から少し外れてdict.keys()、リストのようなオブジェクトではなく、反復可能なオブジェクトを返します。リストが機能する場所ではなく、イテラブルが機能する場所ならどこでも機能します。リストも反復可能ですが、反復可能はリスト(またはシーケンス...)ではありません

実際のユースケースでは、辞書内のキーを使用する最も一般的なことは、それらを反復処理することであるため、これは理にかなっています。リストとしてそれらが必要な場合は、 を呼び出すことができますlist()

ほとんどzip()の場合、それは繰り返されますが、まったく同じように、タプルの完全な新しいリストを作成して、それを繰り返し処理してからもう一度破棄するのはなぜですか?

これは、いたるところにあるリストのコピーではなく、より多くのイテレータ (およびジェネレータ) を使用するという Python の大きな傾向の一部です。

dict.keys()ただし、内包表記で機能するはずです-タイプミスなどを注意深く確認してください...私にとっては問題なく機能します:

>>> d = dict(zip(['Sounder V Depth, F', 'Vessel Latitude, Degrees-Minutes'], [None, None]))
>>> [key.split(", ") for key in d.keys()]
[['Sounder V Depth', 'F'], ['Vessel Latitude', 'Degrees-Minutes']]
于 2015-03-04T23:58:05.050 に答える