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

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

ただいまの
回答率

88.21%

Pythonで3の倍数を持つ辞書を作成したい

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 197

yukinari302

score 19

Python初学者です。

3の倍数を持つ辞書を作成したいです。

作成する辞書は、以下のように{◯番目:数値}の形で、

{'1番目':3,'2番目':6,'3番目':9,'4番目':12,'5番目':15,'6番目':18,'7番目':21,'8番目':24,'9番目':27,'10番目':30}
のようにしたいです。

d = {}
for i in range(1, 31):
    if i % 3 == 0:
        print(i)

3の倍数を出力することはできたのですが、
{◯番目:数値}の書き方がわかりません。

辞書型について調べてみて
keyとvalueが組み合わせになったデータの型で

dic = {key1 : value1, key2 : value2}


というような基本構文はわかったのですが、
今回のような{◯番目:数値}の書き方がわかりませんので、
教えていただけると助かります。

よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

次のコードを研究してみてください。

d = {}
count = 0
for i in range(1, 31):
    if i % 3 == 0:
        count += 1
        d[f"{count}番目"] = i
print(d)
print()

d2 = {f"{i}番目": i * 3 for i in range(1, 11)}
print(d2)

実行例:
イメージ説明

2番目の方法は 内包表記という機能を利用しています。
dict や list を構築していくときに、python では こんな書き方も用意されているのです。

追記

次のコードも研究してみてください。

r = range(1, 11)
d3 = dict(zip(
  [str(x) + "番目" for x in r],
  [x * 3 for x in r]))
print(d3)

参考情報:

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/02/23 11:52 編集

    反射的にenumerate使ってましたけど,よく考えたらrangeだけでいいですね
    そして,dict内包表記すればよかったです

    キャンセル

  • 2021/02/23 12:16

    katoyさん

    ご回答ありがとうございます。

    count += 1で1を足して代入。
    3の倍数とイコールにするという方法は考えつきませんでした。


    d = {}
    for i in range(1, 31):
    if i % 3 == 0:
    count += 1
    d[f"{count}番目"] = i
    print(d)
    print()

    実行してみたところ、

    d = [f"{count}番目"] = i
    ^
    SyntaxError: invalid syntax

    というエラーが出てしまい原因がわかりません。

    恐れ入ります。
    何が原因かわかりますでしょうか。

    キャンセル

  • 2021/02/24 00:31

    f"{x}" の文字列に変数を埋め込む記述は pytjpon3 でないと動作しません。
    また、cpunt = 0 がないと、 count += 1 はエラーになってしまいます。

    キャンセル

+1

N=31
dict([(f"{i}番目",3*j) for i,j in enumerate(range(N))])


でしょうか?
enumerateはインデックスと配列を同時に取得出来るので便利です

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/02/23 12:10

    nono1234さん

    ご回答ありがとうございます。
    enumerateは存じませんでしたので助かりました。

    自分にとって難しく感じましたので、
    今回はkatoyさんが回答していただいた
    rangeを使ってやってみようと思います(^^)

    キャンセル

+1

f文字列でkeyを作って、対応するvalueとともに内包表記で作成することができます。

N=10
dct = {f"{i}番目":3*i for i in range(1,N+1)}
print(dct)
# {'1番目': 3,
#  '2番目': 6,
#  '3番目': 9,
#  '4番目': 12,
#  '5番目': 15,
#  '6番目': 18,
#  '7番目': 21,
#  '8番目': 24,
#  '9番目': 27,
#  '10番目': 30}

内包表記を使わない場合は、下記のように書けます。

N=10
dct = {}
for i in range(1,N+1):
    dct[f"{i}番目"] = 3*i
print(dct)
# {'1番目': 3,
#  '2番目': 6,
#  '3番目': 9,
#  '4番目': 12,
#  '5番目': 15,
#  '6番目': 18,
#  '7番目': 21,
#  '8番目': 24,
#  '9番目': 27,
#  '10番目': 30}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/02/23 14:38

    jeanbiegoさん
    ご回答ありがとうございます。

    2パターン書いてくださりとても勉強になりました。
    内包表記についても勉強してみます。

    キャンセル

-3

こうです。

>>> d = {}
>>> d['1番目'] = 3
>>> print(d)
{'1番目': 3}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る