🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

699閲覧

辞書型のデータを保存する際に、辞書の機能を保持したい

rgb_nk

総合スコア26

Python

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

1グッド

0クリップ

投稿2019/10/16 07:25

辞書型のデータを一度テキストデータに保存した後、別ファイルで呼び出す際に辞書の機能を保持したい。
例えば

{
'氏名': ['ジョン', 'かわかみ', 'うえだ', 'ポール'],
'性別': ['女', '女', '女', '女'],
'E-mailアドレス': ['john@gmail.com', 'kawakami@gmail.com', 'ueda@gmail.com', 'poul@gmail.com']
}

といった辞書型のデータがあるとします。このデータをtxtデータとして保存した際、別のファイルで活用したいです。
しかしテキストデータとして呼び出すとリストや文字列として扱われ、辞書として機能しません。

うまく、辞書として使いまわしできる方法はないでしょうか?

試したこと、

python

1def write_txt(type_of_dictionary): 2 with open('sample_w2.txt', 'w') as f: 3 for k,v in type_of_dictionary.items(): 4 if sorted(type_of_dictionary.keys())[0] == k: 5 print('run') 6 f.write('{' + '{0}'.format(k) + ':' + str(v) +'\n') 7 8 f.write('{0}'.format(k) + ':' + str(v) +'\n') 9 10 if sorted(type_of_dictionary.keys())[len(type_of_dictionary.keys()) - 1] == k: 11 print('end') 12 f.write('{0}'.format(k) + ':' + str(v) + '}')

これで、テキストデータには、辞書っぽい形として保存されるのですが、文字列として書き込んでいるので、
別ファイルで読み込み、keyを指定したところリストにはkeyが存在しないとでます。

ちなみに、
astライブラリーのliteral_eval()
を使用しましたが、うまくいきませんでした。
よろしくお願いいたします

ktgiyey👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

json形式で保存して下さい。
辞書のまま簡単に保存できますし、取り出してそのまま使えます。

json.dumpの際 ensure_ascii=False を指定すれば、日本語も出力できます。

投稿2019/10/16 07:30

LouiS0616

総合スコア35668

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

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

rgb_nk

2019/10/18 06:14

ValueError: Circular reference detected このようなエラーがでるのですが、辞書の問題なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問