1. ホーム
  2. パイソン

[解決済み】[key1,val1,key2,val2]をdictに変換する?

2022-04-07 19:36:24

質問

例えば、次のようなリストがあるとします。 a はPythonで、その項目は都合よく辞書にマップされます。各偶数要素は辞書のキーを表し、次の奇数要素は値です。

を例とします。

a = ['hello','world','1','2']

で、それを辞書に変換したいのですが b ここで

b['hello'] = 'world'
b['1'] = '2'

これを達成するために、構文的に最もきれいな方法は何でしょうか?

どのように解決するのですか?

b = dict(zip(a[::2], a[1::2]))

もし a が大きい場合、おそらく次のようなことをしたくなるでしょう。これは、上記のような一時的なリストを作らないようにするためです。

from itertools import izip
i = iter(a)
b = dict(izip(i, i))

Python 3では、dict内包を使うこともできますが、皮肉なことに、最も簡単な方法は range()len() というのは、通常であればコードスニッジとなるはずです。

b = {a[i]: a[i+1] for i in range(0, len(a), 2)}

そのため iter()/izip() メソッドは、EOLがコメントで指摘しているように、Python 3ではまだ最もPythonicであると思われますが。 zip() は Python 3 ではすでに遅延しているので izip() .

i = iter(a)
b = dict(zip(i, i))

Python 3.8以降では、"walrus"演算子を使って一行で書くことができます( := ):

b = dict(zip(i := iter(a), i))

そうでなければ、セミコロンを使って1行にまとめる必要があります。