概要
Pythonで配列から辞書に変換する方法を10サイトくらい閲覧しました。
「よくある入門解説ブログには掲載されていないパターン」を見つけましたので応用編と称して紹介します。
よくある例
配列から辞書に変換する方法で検索すると、キーと値が1:1の例が多数ヒットします。
test002.py
key2=["name","age","kind"]
data2=["siva",4,"dog"]
print(dict(zip(key2,data2)))
キーと値が別々の配列になっていましたが、きれいに辞書に変換できました。
output
{'name': 'siva', 'age': 4, 'kind': 'dog'}
実践
実際には以下のような複雑なデータを処理する場合があったりします。
よくある例を、そのまま当てはめても欲しい形式に変換することはできません。
test001.py
key1=["name","age","kind"]
data1=[["garm",4,"dog"],["chapalu",3,"cat"],["echidna",10,"snake"],["phoenix",6,"bird"]]
print(dict(zip(key1,data1)))
これでは、ぐちゃぐちゃです。役に立たないデータになってしまいました。
output
{'name': ['garm', 4, 'dog'], 'age': ['chapalu', 3, 'cat'], 'kind': ['echidna', 10, 'snake']}
結論
そこで、以下のように内包表記を利用してみます。
test001.py
key1=["name","age","kind"]
data1=[["garm",4,"dog"],["chapalu",3,"cat"],["echidna",10,"snake"],["phoenix",6,"bird"]]
print([dict(zip(key1,item)) for item in data1])
上手くいきました。
output
[{'name': 'garm', 'age': 4, 'kind': 'dog'}, {'name': 'chapalu', 'age': 3, 'kind': 'cat'}, {'name': 'echidna', 'age': 10, 'kind': 'snake'}, {'name': 'phoenix', 'age': 6, 'kind': 'bird'}]
回帰
For文で書き直してみると、こうなります。
test001.py
key1=["name","age","kind"]
data1=[["garm",4,"dog"],["chapalu",3,"cat"],["echidna",10,"snake"],["phoenix",6,"bird"]]
mydata = []
for item in data1:
mydata.append(dict(zip(key1,item)))
print(mydata)
結果は同じですね。
output
[{'name': 'garm', 'age': 4, 'kind': 'dog'}, {'name': 'chapalu', 'age': 3, 'kind': 'cat'}, {'name': 'echidna', 'age': 10, 'kind': 'snake'}, {'name': 'phoenix', 'age': 6, 'kind': 'bird'}]
参考
- キーと辞書が交互に並んだ特殊なパターン
Excelsior!!