質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

18244閲覧

辞書型をリスト型に順番に変換する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/14 14:46

編集2018/06/14 15:33

ほそく

#list リスト型の場合 if isinstance(variable_field,list) == True: print("csv-outpiut:list ",type(variable_field)) writer.writerow(fixed_field + variable_field) # 固定項目+可変項目 #dict 辞書型の場合 elif isinstance(variable_field,dict) == True: print("csv-outpiut:dict ",type(variable_field)) lst = [] for e in variable_field.items(): lst.extend(e) print("lst :",lst) writer.writerow(fixed_field + lst) # 固定項目+可変項目 #タプル型の場合 elif isinstance(variable_field,tuple) == True: print("csv-outpiut:tuple ",type(variable_field)) listed_var = list(variable_field) writer.writerow(fixed_field + listed_var) # 固定項目+可変項目 else: print("csv-outpiut:other ------------------e-r-r-o-r-e-r-r-o-r-e-r-",type(variable_field))

おせわになります。初心者です。
辞書型データを並び順は同じで配列型リスト型に変換するには
どのように指定すべきでしょうか?

例えば

variable_field {'name': 'ああ', 'balance': 0.0, 'age': '23'}

の時に以下のようなリスト型に変換したいのです。

['name','ああ', 'balance',0.0, 'age','23']

ためしたこと
listed_var = list(variable_field)

よろしくお願いします

参考サイト
http://ututel.blog121.fc2.com/blog-entry-45.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pythonの言語仕様では、辞書のキー順は任意です。書いた通りの順番で出てくるとは限りません。
(CPython3.6の実装だと維持されるようになっているらしいですが、たまたまそういう実装というだけでこれに頼るべきではないでしょうし、CPython3.6以前の環境では使えません)

なので、困りましたね。とりあえず、順番を不問にして良いのなら、やることはできます。

python

1d = {'name': 'ああ', 'balance': 0.0, 'age': '23'} 2lst = [] 3for e in d.items(): 4 lst.extend(e)

これをリスト内包表記にしていないのには理由があります。リスト内包表記は、実は一回の反復で複数の要素を足すような処理は(まともには)書けないのです。なので、けっきょくこうするのが一番の近道です。

順番を気にするのであれば、OrderedDictという手があります。

8.3. collections — コンテナデータ型 — Python 3.6.5 ドキュメント

あるいは、先にどんなキーが来るかわかっているのなら、最初からキーでループした方が得策かもしれません。これならキーの順番にできます。

python

1d = {'name': 'ああ', 'balance': 0.0, 'age': '23'} 2lst = [] 3for k in ['name', 'balance', 'age']: 4 lst.append(k) 5 lst.append(d[k])

ところで

質問者さんの過去の質問で、解決済みになっていないものがけっこうあるようです。良い回答が得られて問題が解決したのであれば、解決済みにすることをおすすめします。

投稿2018/06/14 15:05

編集2018/06/14 15:50
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/14 15:09

ありがとうございます。今試してみます。キーは毎回異なってしまうんですよ。残念ですね
hayataka2049

2018/06/14 15:17

最初から順番の概念がないものを「順番通りに」扱うことはできないですからねー。 あと、これJSONから取ったデータだったりします? もしそうなら、そもそもJSON自体、キーと値のペアの順番はないですから基本的に無理ですね。
退会済みユーザー

退会済みユーザー

2018/06/14 15:22

本当にありがとうございます。2点質問があります。 1 同じくタプル型をリストに変換する場合は list(variable_field) でよいのでしょうか? 2辞書型の順番はランダムなのは調べてわかりましが、このランダム性はcsvのカラム上は毎回変わらず一定と考えてよろしいですか。 つまり順番はごちゃまぜだけど、ごちゃごちゃの順番は何回csvを作成しても変わらない。
退会済みユーザー

退会済みユーザー

2018/06/14 15:24

私はhayataka2049さんに出会わなければ本気でプログラムやめてました。ありがとう。つばめちゃん????
hayataka2049

2018/06/14 15:29

>1 variable_fieldがタプル型オブジェクトを参照しているならそれで良いです >2 インタプリタの実装に依存します。基本的には考えない方がよろしいです。ややこしい話なので、私も説明する自信がありませんが、よくまとまっている記事があるので紹介しておきます。 http://www.freia.jp/taka/blog/python3-hash-randomie/index.html 「まあできちゃうよね」という現実もありますが、あくまでも同一の辞書オブジェクトに対しての話。同じキーを持つ違う辞書オブジェクトでも同じ順番になるとは限らないとか、プログラム走らせるたびに変わり得るとかだと、使い物にはならないでしょう。
hayataka2049

2018/06/14 15:30

ありゃ、なんかすみません
退会済みユーザー

退会済みユーザー

2018/06/14 15:35

1 参照するオブジェクト型を分けてチェックしてみました。csvを出力するのが目的のため。気になる点があれば是非ご教示ください。 2 csvの項目が変わらなければいいかなと思っています。
退会済みユーザー

退会済みユーザー

2018/06/14 15:35

補足としてソースを冒頭にかきました
hayataka2049

2018/06/14 15:40

1.とりあえず==Trueは要らないですね 2.そしたら、回答の2つ目のコードのやり方で、キーのリストをsorted(d.keys())とかにすれば、とりあえず同じ辞書が来たら同じ順番(アルファベット順)に並びはするんじゃないですかね。
hayataka2049

2018/06/14 15:46

そう思って一応回答にも載せてたんですが、そもそも最初から辞書型でinputされてきたものをOrderdDictでどうこうしようとか考えてもあんまり意味ないんじゃという気が個人的にはするのです
yuusuko

2018/06/14 15:49 編集

左様でございましたか。 ご回答の見落としでございました。 横槍、申し訳ありません。
退会済みユーザー

退会済みユーザー

2018/06/14 15:49

たしかに。ありがとうございます。yuusukoさんもありがと
hayataka2049

2018/06/14 15:53 編集

>yuusukoさん 構いませんよ。というか、私が書いていたのは「OrderdDict」についてでした(上のコメントでもそう書いているので、素で覚え間違えてた) はずかし・・・とりあえず回答の方は修正しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問