web-dev-qa-db-ja.com

Python辞書からリストへの変換

可能な重複:
Python辞書をタプルのリストに変換するにはどうすればよいですか?

私はいくつかの計算を実行するために、Python辞書をPythonリストに変換しようとしています。

#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"

#lists
temp = []
dictList = []

#My attempt:
for key, value in dict.iteritems():
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp) 
    aKey = ""
    aValue = ""

それは私の試みです...しかし私は何が悪いのかわからないのですか?

158
Federer

あなたの問題はあなたがそれらを文字列にする引用符でkeyvalueを持っているということです。すなわち、変数aKeyの値ではなく文字列"key"を含むようにkeyを設定しているのです。また、tempリストをクリアしていないので、2つの項目を含めるのではなく、毎回追加しています。

コードを修正するには、次のようにしてください。

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

使用する前にループ変数keyvalueを別の変数にコピーする必要はないので、それらは削除しました。同様に、リストを作成するためにappendを使う必要はありません。上記のように角括弧で囲んで指定することができます。そして、できるだけ短くしたいのであれば、dictlist.append([key,value])を実行することもできます。

または提案されているように単にdict.items()を使用してください。

124
Dave Webb
dict.items()

トリックをします。

374
Björn

Pythonでは dict からlistへの変換は簡単です。 3つの例

>> d = {'a': 'Arthur', 'b': 'Belling'}

>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]

>> d.keys()
['a', 'b']

>> d.values()
['Arthur', 'Belling']
164
Akseli Palén

dict.items()を使うべきです。

これがあなたの問題のためのワンライナー解決策です:

[(k,v) for k,v in dict.items()]

そして結果:

[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]

またはできます

l=[]
[l.extend([k,v]) for k,v in dict.items()]

にとって:

['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
48
Shay
 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
 >>> list(reduce(lambda x, y: x + y, a.items()))
 ['foo', 'bar', 'baz', 'quux', 'hello', 'world']

説明:a.items()はタプルのリストを返します。 2つのタプルを一緒に追加すると、1つのタプルにすべての要素が含まれます。したがって、簡約はすべてのキーと値を含む1つのTupleを作成し、次にlist(...)はそれからリストを作成します。

30
Martin DeMello

おそらくあなたはこれを望んでいるでしょう:

dictList = dict.items()

あなたのアプローチには2つの問題があります。一つには、引用符でkeyvalueを使います。これは、 "key"と "value"の文字列で、その名前の変数とは関係ありません。また、あなたは "一時的な"リストに要素を追加し続け、前の繰り返しから既にそこにある古い要素を取り除くことはありません。各反復に新しい空のtempリストがあることを確認し、key変数とvalue変数を使用します。

for key, value in dict.iteritems():
    temp = []
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp)

また、これは一時変数なしで短く書くことができ、Python 3ではitems()ではなくiteritems()です。

for key, value in dict.items():
    dictList.append([key, value])
18
sth

タプルのリストを作成するためだけの辞書を作成しているのであれば、あなたのような辞書を作成するのは面倒かもしれないので、Zip()の使用を検討するとよいでしょう。

1つの見出しと複数の行がある場合に特に便利です。たとえば、私はあなたが国のオリンピックの統計が欲しいと仮定した場合:

headers = ['Capital', 'Food', 'Year']
countries = [
    ['London', 'Fish & Chips', '2012'],
    ['Beijing', 'Noodles', '2008'],
]

for olympics in countries:
    print Zip(headers, olympics)

与える

[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]

それが最終目標であるかどうかわからない、そして私は話題にならないが、それは心に留めておくべきことかもしれません。

5
Morgan