辞書へのタプルのリスト


111

タプルのリストを現在Pythonで辞書に変換している方法は次のとおりです。

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

もっと良い方法はありますか?これを行うためのワンライナーが必要なようです。

回答:


177

dict()タプルのリストを直接呼び出すだけです

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp、それを行う簡単な方法があることを知っていました... Rubyからここに来て、Pythonのやり方を学ぼうとしました。ありがとう!
サラ船

5
@chandreshこれ Python 3では機能するため、更新は必要ありません。
Sven Marnach

@SvenMarnach、これはpy 3.5端末で上に書いた同じコマンドの私の出力です。トレースバック(最後の最後の呼び出し):ファイル "<ipython-input-313-7bb3559567ff>"、1行目<module> dict(my_list)TypeError: 'Dictionary' object is not callable
CKM

4
@chandreshこれはPython 3とは何の関係もありませんdict。同じ名前のPython組み込みをシャドウしているという変数があるためです。あなたはそれをしてはいけません。
Sven Marnach

@SvenMarnachああ。ありがとう。出来た。実際、私はウェブからいくつかのコードを取得し、これを実行しようとしました。筆者dictは、エラーが発生した場所から変数名として使用していたようです。再度、感謝します。
CKM 2018

23

dictコンストラクタは、あなたがそれ(キー/値のタプルを)持っているとおりに入力を受け付けます。

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

ドキュメントから:

たとえば、これらはすべて{"one":1、 "two":2}に等しいディクショナリを返します。

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

dict理解:

h = {k:v for k,v in l}

4
dictに追加する前にキー/値のフォーマットを行うことができるので、すばらしい
jfunk

7

タプルのリストにはキーと値のマッピングが1対1であると想定しているようです(たとえば、辞書のキーが重複していないなど)。これは、このトピックについて検索する最初の質問なので、重複を処理する必要があるより一般的なケースの回答を投稿します。

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.