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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

534閲覧

pythonの辞書について

shosinnshadesu

総合スコア93

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/18 00:20

paizaの答えの載っている練習問題において、コードの意味が分かりません。

python

1#! /usr/local/bin/python3 2 3num = int(input()) 4inputs = {} 5result = {} 6 7for i in range(num): 8 tmp = input().split() 9 10 exist = False 11 for (key, value) in inputs.items(): 12 if key == tmp[0]: 13 exist = True 14 15 if exist: 16 inputs[tmp[0]] = inputs[tmp[0]] + int(tmp[1]) 17 else: 18 inputs[tmp[0]] = int(tmp[1]) 19 20# ソート用にkeyとvalueを反転させた辞書を作る 21for (key, value) in inputs.items(): 22 result[value] = key 23 24result = sorted(result.items(), reverse=True) 25 26for i in result: 27 print(i[1] + ' ' + str(i[0]))
入力 7 A 1 D 6 C 2 G 4 B 70 A 10 B 5
B 75 A 11 D 6 G 4 C 2

同じアルファベットのものは足して、大きい順に出力するという問題です。

上のコードのときに、
if exist:
inputs[tmp[0]] = inputs[tmp[0]] + int(tmp[1])
else:
inputs[tmp[0]] = int(tmp[1])

ここの部分がわかりません
どなたか教えていただけると嬉しいです。

https://paiza.jp/works/mondai/prob60/sort_add_9?language_uid=python3&t=349ef83df813d5be3fc981b66f1dd77b

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

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

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

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

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

guest

回答1

0

ベストアンサー

日本語に直すと、

if exist:

existが真なら、つまりキーtmp[0]が存在すれば、

inputs[tmp[0]] = inputs[tmp[0]] + int(tmp[1])

キーがtmp[0]の要素の値にtmp[1]を整数化したものを足し込む。

else:

それ以外なら、

inputs[tmp[0]] = int(tmp[1])

tmp[1]を整数化したものをキーをtmp[0]として格納する。

どの部分が理解しにくかったのでしょうか?
このforループは全体として、> inputs[tmp[0]] = inputs[tmp[0]] + int(tmp[1])をしたいのですが、キーが存在しない場合はinputs[tmp[0]]の参照がエラーになるので、キーが存在するかしないかを調べて場合分けしています。

なお、これは初心者の書いたコード、あるいは、何かの説明のためにわざと冗長に書いたコードで、シンプルに書けます。

Python

1for i in range(num): 2 tmp = input().split() 3 inputs[tmp[0]] = inputs.get(tmp[0],0) + int(tmp[1])

投稿2020/08/18 00:34

編集2020/08/18 00:44
otn

総合スコア84423

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

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

shosinnshadesu

2020/08/18 02:06

inputs[tmp[0]] = inputs[tmp[0]] + int(tmp[1]) 上の部分は、 辞書のキー = 辞書のキー + 辞書の値になっていると思いますが、なぜそうするかよくわかりません。
otn

2020/08/18 02:15

> 辞書のキー = 辞書のキー + 辞書の値になっていると思いますが、 いいえ。よく見ましょう。
shosinnshadesu

2020/08/18 02:29

わかりました。 inputs[tmp[0]] += int(tmp[1])に置き換えられますよね? そうすると、重複したtmp[0]のtmp[1]をtmp[0]に足すという意味ですか?
otn

2020/08/18 02:32

> inputs[tmp[0]] += int(tmp[1])に置き換えられますよね? はい。 > そうすると、重複したtmp[0]のtmp[1]をtmp[0]に足すという意味ですか? いいえ。 tmp[0]じゃなくてinputs[tmp[0]]に足しています。
shosinnshadesu

2020/08/18 02:56

inputs[tmp[0]]は、キーではなく値ですか?
otn

2020/08/18 07:31

はい。 tmp[0]はキーで、inputs[tmp[0]]は値です。 辞書の練習問題をやる前にはまず辞書の知識を付けましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問