2014/03/17

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

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

まずは、元のリストが要素をふたつずつ持ったタプルからできている場合。この場合はそのまま dict 関数を使います。
# リストの要素がすでに2個組のタプルとなっている
li1 = [("a", 3), ("b", 2), ("c", 5)]

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

辞書の内包表記を使えば、次のような書き方をすることもできます。
d = {k: v for (k, v) in li1}
# => {'b': 2, 'c': 5, 'a': 3}

次に、元のリストが「キー バリュー キー バリュー ...」というように、キーとバリューを交互に格納したリストの場合。この場合は、いったんキーとバリューがセットになったタプルを作ってから 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 関数に渡すことで奇数番目と空数番目の要素をセットにしたタプルのリストができあがります(正確にはリストではなくイテレータができあがります)。


参考
Python: create a dictionary with list comprehension - Stack Overflow
Python Ordered Dictionary to regular Dictionary - Stack Overflow

0 件のコメント: