52
77

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで配列から辞書に変換する方法【応用編】

Last updated at Posted at 2020-08-18

概要

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!!

52
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
77

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?