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

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

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

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

Q&A

解決済

2回答

667閲覧

Pythonの辞書のネストで思った動作をしません

WatanabeJin

総合スコア44

Python

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

0グッド

0クリップ

投稿2021/10/28 06:53

問題

以下のような辞書を作成しようとしています。

result = { 'クイズ1': {'正解': 0, '不正解': 0}, 'クイズ2': {'正解': 0, '不正解': 0}, 'クイズ3': {'正解': 0, '不正解': 0}, 'クイズ4': {'正解': 0, '不正解': 0}, 'クイズ5': {'正解': 0, '不正解': 0}, 'クイズ6': {'正解': 0, '不正解': 0}, 'クイズ7': {'正解': 0, '不正解': 0}, 'クイズ8': {'正解': 0, '不正解': 0}, 'クイズ9': {'正解': 0, '不正解': 0}, 'クイズ10': {'正解': 0, '不正解': 0} }

クイズは多くあり、辞書をfor文で作成したいと思い、以下のコードを書きました。

result = {} ans = {'正解': 0, '不正解': 0} for i in range(10): result[f'クイズ{i+1}'] = ans

そして、クイズ1の正解を+1しようとしたところ、すべての正解が+1されてしまいました。

result['クイズ1']['正解'] = 1 print(result)
# 結果 {'クイズ1': {'正解': 1, '不正解': 0}, 'クイズ2': {'正解': 1, '不正解': 0}, 'クイズ3': {'正解': 1, '不正解': 0}, 'クイズ4': {'正解': 1, '不正解': 0}, 'クイズ5': {'正解': 1, '不正解': 0}, 'クイズ6': {'正解': 1, '不正解': 0}, 'クイズ7': {'正解': 1, '不正解': 0}, 'クイズ8': {'正解': 1, '不正解': 0}, 'クイズ9': {'正解': 1, '不正解': 0}, 'クイズ10': {'正解': 1, '不正解': 0}}

クイズ1だけを1にしたいのですが、どのようにすればよいのでしょうか。

また、辞書を以下のように定義すると問題なくできております。
しかし、すべて書くのは大変ですので別の方法が知りたいです。

result = { 'クイズ1': {'正解': 0, '不正解': 0}, 'クイズ2': {'正解': 0, '不正解': 0}, 'クイズ3': {'正解': 0, '不正解': 0}, 'クイズ4': {'正解': 0, '不正解': 0}, 'クイズ5': {'正解': 0, '不正解': 0}, 'クイズ6': {'正解': 0, '不正解': 0}, 'クイズ7': {'正解': 0, '不正解': 0}, 'クイズ8': {'正解': 0, '不正解': 0}, 'クイズ9': {'正解': 0, '不正解': 0}, 'クイズ10': {'正解': 0, '不正解': 0} } result['クイズ1']['正解'] = 1
# 結果 {'クイズ1': {'正解': 1, '不正解': 0}, 'クイズ2': {'正解': 0, '不正解': 0}, 'クイズ3': {'正解': 0, '不正解': 0}, 'クイズ4': {'正解': 0, '不正解': 0}, 'クイズ5': {'正解': 0, '不正解': 0}, 'クイズ6': {'正解': 0, '不正解': 0}, 'クイズ7': {'正解': 0, '不正解': 0}, 'クイズ8': {'正解': 0, '不正解': 0}, 'クイズ9': {'正解': 0, '不正解': 0}, 'クイズ10': {'正解': 0, '不正解': 0}}

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

result = {
{'クイズ1': {'正解': 0, '不正解': 0}},
{'クイズ2': {'正解': 0, '不正解': 0}},
{'クイズ3': {'正解': 0, '不正解': 0}},
{'クイズ4': {'正解': 0, '不正解': 0}},
{'クイズ5': {'正解': 0, '不正解': 0}},
{'クイズ6': {'正解': 0, '不正解': 0}},
{'クイズ7': {'正解': 0, '不正解': 0}},
{'クイズ8': {'正解': 0, '不正解': 0}},
{'クイズ9': {'正解': 0, '不正解': 0}},
{'クイズ10': {'正解': 0, '不正解': 0}}
}

ではないですよね?
経験皆無な回答者ですいません。

投稿2021/10/28 07:04

megu_min19375

総合スコア26

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

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

0

自己解決

result = {} ans = {'正解': 0, '不正解': 0} for i in range(10): result[f'クイズ{i+1}'] = {'正解': 0, '不正解': 0}

このようにした所うごきました。
変数に入れるとダメみたいでした。

投稿2021/10/28 07:03

WatanabeJin

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問