ワンライナー:インデックスをキーとしてリストから辞書を作成する


91

特定のリストから1行だけで辞書を作成したい。辞書のキーはインデックスになり、値はリストの要素になります。このようなもの:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

出力:

{0:51, 1:27, 2:13, 3:56}

なぜ1行にする必要があるかについて、特定の要件はありません。私はただpythonを探索していて、それが可能かどうか疑問に思っています。


3
この辞書を使用することでどのような利点があると思いますか?辞書を使用すると、インデックスの検索が速くなりません。
Martijn Pieters

@MartijnPieters:まあ、私はこれを必要とするかもしれません、例えば:{[x[0]:51, x[1]:27, x[2]:13, x[3]:56}
Nawaz

3
次に、単に使用しzip()ますdict(zip(x, a))
Martijn Pieters

回答:


158
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

生成されます

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

列挙オブジェクトを返します。sequenceは、シーケンス、イテレーター、または反復をサポートするその他のオブジェクトでなければなりません。next()によってenumerate()返されるイテレータのメソッドは、tupleカウント(開始からデフォルトは0)と、シーケンスの反復から取得した値を返します。


2
@jamylakしかし、あなたを削除する必要はありません。人々はcount()... について学んだかもしれない
glglgl 2013年

@glglglそれを行うには1つの方法があるはずです;)
jamylak 2013年

2分で私を倒す:)
jcr 2013年

48

別のコンストラクタを使用すると、

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dictとセット内包表記はPython 2.7にバックポートされました。
kevingessner 2013年

私は修正された立場です。それでも、これは以前のPython 2バージョンには当てはまりません。
Stefano Sanfilippo 2013年



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.