この古い質問に偶然出くわしましたが、受け入れられた答えには納得できません。
受け入れられた回答
受け入れられた答えの何が邪魔ですか?このことを考慮:
>>> wp_users = [(1, 'Bill'), (2, 'Bob')]
>>> {k: v for e in wp_users for k, v in zip(('ID', 'post_author'), e)}
{'ID': 2, 'post_author': 'Bob'}
wp_users
、 、辞書の最初の反復e = (1, 'Bill')
は{'ID':1, 'post_author': 'Bill'}
- の2 回目の反復
wp_users
, e = (2, 'Bob')
, dict は完全に上書きされます{'ID':2, 'post_author': 'Bob'}
繰り返しのたびに、辞書のすべての値が上書きされます。ループを回避して、 の最後の要素に直接ジャンプできますwp_users
。
>>> {k: v for e in wp_users for k, v in zip(('ID', 'post_author'), e)}
{'ID': 2, 'post_author': 'Bob'}
または:
>>> dict(zip(('ID', 'post_author'), wp_users[-1]))
{'ID': 2, 'post_author': 'Bob'}
それはあなたが望むものではないと思います。
あなたが達成しようとしていることは不明のままですが、2 つのオプションがあります。ユーザー(id, post_author)
のリストがあり、辞書のリスト (ユーザーごとに 1 つの辞書) またはタプルの辞書 (フィールドごとに 1 つのタプル) のいずれかを作成します。最初のバージョンは行によるプレゼンテーションとして、2 番目のバージョンは同じデータの列によるプレゼンテーションとして見ることができます。
辞書のリスト
これを試して:
>>> [dict(zip(('ID', 'post_author'), user)) for user in wp_users]
[{'ID': 1, 'post_author': 'Bill'}, {'ID': 2, 'post_author': 'Bob'}]
ごとuser
に、zip
タプルを作成('ID', id)
し('post_author', author)
、dict
辞書を生成します。これで、次のようなフィールドにアクセスできます。
>>> ds = [dict(zip(('ID', 'post_author'), user)) for user in wp_users]
>>> ds[0]['post_author']
'Bill'
タプルの辞書
これはもっと珍しいことですが、値がタプルである 1 つの辞書が必要になる場合があります。
>>> dict(zip(('ID', 'post_author'), zip(*wp_users)))
{'ID': (1, 2), 'post_author': ('Bill', 'Bob')}
zip(*wp_users)
タプルのリストを作成するだけ[(id1, id2, ...), (post_author1, post_author2, ...)]
で、残りは以前のバージョンと同様です。
>>> d = dict(zip(('ID', 'post_author'), zip(*wp_users)))
>>> d['post_author'][0]
'Bill'
ボーナス
行ビューから列を抽出するには:
>>> [d['ID'] for d in ds]
[1, 2]
列ビューから行を抽出するには:
>>> {k:vs[1] for k, vs in d.items()}
{'ID': 2, 'post_author': 'Bob'}