46

セットをdictに変換するpythonicな方法はありますか?

以下のセットを入手しました

s = {1,2,4,5,6}

そして、次の口述が欲しい

c = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}

あなたがするリストで

a = [1,2,3,4,5,6]
b = []

while len(b) < len(a):
   b.append(0)

c = dict(itertools.izip(a,b))
4

3 に答える 3

87

使用dict.fromkeys():

c = dict.fromkeys(s, 0)

デモ:

>>> s = {1,2,4,5,6}
>>> dict.fromkeys(s, 0)
{1: 0, 2: 0, 4: 0, 5: 0, 6: 0}

これはリストでも機能します。シーケンスからディクショナリを作成する最も効率的な方法です。すべての値は、 に渡した 1 つのデフォルトへの参照であるdict.fromkeys()ため、そのデフォルト値が変更可能なオブジェクトである場合は注意してください。

于 2013-09-05T11:05:23.970 に答える
20

@Martijn Pietersによって提供される方法に加えて、次のような辞書内包表記を使用することもできます。

s = {1,2,4,5,6}
d = {e:0 for e in s}

このメソッドは dict.fromkeys() よりも低速ですが、常にゼロにしたくない場合に備えて、dict の値を必要な値に設定できます。

それを使用してリストを作成することもできます。リスト内包表記は、質問にあるループよりも高速で、より Pythonic です。ここで内包表記の詳細を学ぶことができます: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

于 2013-09-05T11:09:49.923 に答える