Python Tips: リストから辞書を作成したい

Python でリストから辞書を作成する方法についてご紹介します。

要素数 2 のタプルからなるリストの場合

まずは元のリストが要素数 2 のタプルからできている場合です。この場合はそのまま dict() を使います。

# リストの要素がすでに2個組のタプルとなっている
li1 = [("a", 3), ("b", 2), ("c", 5)]

di1 = dict(li1)
# => {'b': 2, 'c': 5, 'a': 3}

辞書の内包表記を使えば、次のように書くこともできます。

li1 = [("a", 3), ("b", 2), ("c", 5)]

di1 = {k: v for (k, v) in li1}
# => {'b': 2, 'c': 5, 'a': 3}

次に、元のリストが「キー バリュー キー バリュー ...」というように、キーとバリューを交互に格納したリストの場合。この場合は、 2 つずつグルーピングして、キーとバリューがセットになったタプルのリストを作ってから dict() に渡すようにするとシンプルに書けます。

# リストの要素が交互に並んだキーとバリューになっている
li2 = ["a", 3, "b", 2, "c", 5]

di2 = dict(zip(li2[0::2], li2[1::2]))
# => {'b': 2, 'c': 5, 'a': 3}

ここで、 li2[0::2] は奇数番目の要素、 li2[1::2] は偶数番目の要素を収めたリストとなっています。 これらを zip() 関数に渡すことで奇数番目と空数番目の要素をセットにしたタプルのリストができます(正確にはリストではなくイテレータが生成されます)。

参考