web-dev-qa-db-ja.com

dictに設定Python

セットを辞書に変換するPythonの方法はありますか?

私は次のセットを手に入れました

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))
37
Sven Bamberger

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}
_

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

72
Martijn Pieters

@ 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

16
papirrin

これも別の方法です

s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])
6
asit_dhal