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

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

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

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

Q&A

解決済

3回答

1414閲覧

python 辞書型について

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/06/05 07:59

テキストを読み込んで辞書型に格納する処理を書いています。
辞書型のデーター形式 キー:値 で構成されるということは、分かるのですが、
1回目のループでkye = word_list[0]、**kye = word_list[1]**には、こんにちは コンニチハ が入り
2回目のループで ありがとう,ドウイタシマシテ が入ってくるのですが、kye = word_list[0]kye = word_list[1]にはすでにデーターが入っているわけですから、本来はkye = word_list[3]、**kye = word_list[4]**に、ありがとう,ドウイタシマシテ が格納されると思ってしまいます。

また、kye = word_list[0]、**kye = word_list[1]**とのように、添字を固定してしまうと、上書きされるのではないでしょうか?

イマイチ、辞書型のループ処理というものが理解できません。
どなたか、辞書型のループにつて教えて下さい。

python

1# 下記のpybot.txtを読み込む処理 2with open('pybot.txt',encoding='utf-8') as open_file: 3 raw_data = open_file.read() 4linese = raw_data.splitlines() 5 6# 読み込んだpybot.txtを辞書型に格納する処理 7bot_dict= {} 8for line in linese: 9 word_list = line.split(',') 10 kye = word_list[0] # ここが理解できません。 11 res = word_list[1] # ここが理解できません。 12 bot_dict[kye] = res 13 print(bot_dict)

pybot.txt

txt

1こんにちは,コンニチハ 2ありがとう,ドウイタシマシテ 3さようなら,サヨウナラ

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

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

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

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

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

Lhankor_Mhy

2020/06/05 08:05

ループしてるものは辞書型ではないですよ。
guest

回答3

0

ベストアンサー

ループを使わないで書くと、こうなります。

python

1linese = [ 2"こんにちは,コンニチハ", 3"ありがとう,ドウイタシマシテ", 4"さようなら,サヨウナラ", 5 ] 6bot_dict= {} 7 8line = linese[0] 9word_list = line.split(',') 10kye = word_list[0] # ここが理解できません。 11res = word_list[1] # ここが理解できません。 12bot_dict[kye] = res 13 14line = linese[1] 15word_list = line.split(',') 16kye = word_list[0] # ここが理解できません。 17res = word_list[1] # ここが理解できません。 18bot_dict[kye] = res 19 20line = linese[2] 21word_list = line.split(',') 22kye = word_list[0] # ここが理解できません。 23res = word_list[1] # ここが理解できません。 24bot_dict[kye] = res 25 26print(bot_dict)

変数word_listは毎回内容を上書きしていますから、添え字がかぶっても大丈夫、ということです。


もしかして、数学の方程式と代入を混同していますか?

数学だと

x = y y = 2

の時にx = 2ですが、プログラミングではそうはならないのです。
「変数を等号で結ぶと変数同士が同じ値としてリンクしつづける」、という認識でしたら、それは間違っています。

投稿2020/06/05 08:11

編集2020/06/05 08:19
Lhankor_Mhy

総合スコア36960

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

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

退会済みユーザー

退会済みユーザー

2020/06/05 12:25

なるほど!!理解できました!! これほど詳しい解説って、見たこと無いです。
guest

0

プログラムの動きをコメントに書いてみました。
これで、どのようにして処理が進むかが、分かりませんか?

# 下記のpybot.txtを読み込む処理 with open('pybot.txt',encoding='utf-8') as open_file: # ファイル pybot.txt を開く raw_data = open_file.read() # pybot.txtの内容を読みだして、変数raw_dataに入れます。raw_dataの内容は、pybot.txtに入っている3行の文字列になります。 linese = raw_data.splitlines() # raw_dataの内容を、改行文字で分割して、変数linesに入れます。 # linesの内容は['こんにちは,コンニチハ','ありがとう,ドウイタシマシテ','さようなら,サヨウナラ']になります。(改行で分割されて、3つの文字列のリストになっています) # 読み込んだpybot.txtを辞書型に格納する処理 bot_dict= {} # bot_dictは、空の(まだ、何のデータも入っていない)辞書です。 for line in linese: # linesに入っている3つの文字列を、順に変数lineに取り出して、処理を繰り返します。 word_list = line.split(',') # linesから取り出した文字列(例えば、'こんにちは,コンニチハ')をカンマ(,)で分割して変数word_listに入れます。word_listの内容は、カンマで分割されて、2つの文字列のリスト['こんにちは','コンニチハ']になっています。 key = word_list[0] # ここが理解できません。 word_list[0]は、word_listの0番目(先頭)の要素ということですから、keyには'こんにちは'が入ります。 res = word_list[1] # ここが理解できません。 word_list[1]は、word_listの1番目(先頭から2番目)の要素ということですから、resには'コンニチハ'が入ります。 bot_dict[key] = res # 辞書bot_dictに{'こんにちは':'コンニチハ'}という要素が追加されます。 print(bot_dict)

投稿2020/06/05 08:51

coco_bauer

総合スコア6915

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

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

退会済みユーザー

退会済みユーザー

2020/06/05 12:25

丁寧な解説、ありがとうございます!!
guest

0

word_listは辞書型じゃなくてリスト型ですよね。
word_list[0]っていうのはword_listの一つ目の要素ってことです。

投稿2020/06/05 08:07

ForestSeo

総合スコア2722

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問