3

リストがあるとしましょう

demo  = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']]

次のような理解を使用して辞書のリストを作成したい

[{'Adam':'Chicago', 'Gender':'Male', 'Location':'Chicago', 'Team':'Bears'},
{'Brandon':'Miami', 'Gender':'Male', 'Location':'Miami', 'Team':'Dolphins'} }

次のようなものを得るために2つの開始値を割り当てるのは簡単です

{ s[0]:s[1] for s in demo} 

しかし、この内包表記で複数の値を割り当てる正当な方法はありますか?

{ s[0]:s[1],'Gender':s[2], 'Team':s[3] for s in demo} 

そのような具体的な質問であり、検索の用語がわからないため、見つけるのに苦労しており、上記の例では構文エラーが発生しています。

4

3 に答える 3

6

zip を使用して、各エントリをキーと値のペアのリストに変換できます。

dicts= [dict(zip(('Name','Gender','Location', 'Team'), data) for data in demo]

「名前」ラベルは必要ありません。場所を複製するラベルとして名前を使用したいと考えています。したがって、辞書を修正する必要があります。

for d in dicts:
    d[d['Name']] = d['Location']
    del d['Name'] # or not, if you can tolerate the extra key

または、これを 1 ステップで実行できます。

dicts = [{name:location,'Location':location,'Gender':gender, 'Team':team} for name,location,gender,team in demo]
于 2013-07-24T22:02:16.883 に答える
2

あなたの要件は奇妙に見えます.フィールドに論理的な名前を付けようとしているのではないですか(これははるかに理にかなっています):

>>> demo  = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']]
>>> [dict(zip(['name', 'location', 'gender', 'team'], el)) for el in demo]
[{'gender': 'Male', 'team': 'Bears', 'name': 'Adam', 'location': 'Chicago'}, {'gender': 'Male', 'team': 'Dolphins', 'name': 'Brandon', 'location': 'Miami'}]
于 2013-07-24T22:02:06.983 に答える