私はいくつかの計算を実行するために、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 = ""
それは私の試みです...しかし私は何が悪いのかわからないのですか?
あなたの問題はあなたがそれらを文字列にする引用符でkey
とvalue
を持っているということです。すなわち、変数aKey
の値ではなく文字列"key"
を含むようにkey
を設定しているのです。また、temp
リストをクリアしていないので、2つの項目を含めるのではなく、毎回追加しています。
コードを修正するには、次のようにしてください。
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)
使用する前にループ変数key
とvalue
を別の変数にコピーする必要はないので、それらは削除しました。同様に、リストを作成するためにappendを使う必要はありません。上記のように角括弧で囲んで指定することができます。そして、できるだけ短くしたいのであれば、dictlist.append([key,value])
を実行することもできます。
または提案されているように単にdict.items()
を使用してください。
dict.items()
トリックをします。
Pythonでは dict からlistへの変換は簡単です。 3つの例
>> d = {'a': 'Arthur', 'b': 'Belling'}
>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]
>> d.keys()
['a', 'b']
>> d.values()
['Arthur', 'Belling']
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']
>>> 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(...)はそれからリストを作成します。
おそらくあなたはこれを望んでいるでしょう:
dictList = dict.items()
あなたのアプローチには2つの問題があります。一つには、引用符でkey
とvalue
を使います。これは、 "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])
タプルのリストを作成するためだけの辞書を作成しているのであれば、あなたのような辞書を作成するのは面倒かもしれないので、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')]
それが最終目標であるかどうかわからない、そして私は話題にならないが、それは心に留めておくべきことかもしれません。