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

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

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

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

Q&A

解決済

2回答

10989閲覧

Pythonの辞書機能で複数のキーと1つの値を持たせる方法

NEKOMONDO

総合スコア11

Python 3.x

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

0グッド

0クリップ

投稿2019/07/02 06:59

前提・実現したいこと

環境:Python3.x です。

辞書を使って、複数のキーに対して、値を1つを持つプログラムを作りたいと思っています。ですが、辞書は、1つキーに対して1つの値が基本なのでどうしてもエラーが起きてしまいます。辞書で以下のようなプログラムを書くにはどのようにすればよいでしょうか?お手数をおかけしますが、ご回答よろしくお願いします。

A = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday":"work"}
B = {"Saturday","Sunday":"holiday"}

print(A["Monday"])
print(B["Saturday"])

期待する出力
work
holiday

発生している問題・エラーメッセージ

File "Main.py", line 1
A = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday":"work"}
^
SyntaxError: invalid syntax

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

python

1w = "work" 2h = "holiday" 3AB = { 4 "Monday": w, "Tuesday": w, "Wednesday": w, 5 "Thursday": w, "Friday": w, 6 "Saturday": h, "Sunday": h 7}

python

1temporary_inverted = { 2 "work": ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], 3 "holiday": ['Saturday', 'Sunday']} 4AB = {k: v for v, ks in temporary_inverted.items() for k in ks}

にしますかねぇ。

投稿2019/07/02 07:38

quickquip

総合スコア11038

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

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

0

ベストアンサー

素直に書くのが一番です。

Python

1AB = { 2 "Monday": "work", "Tuesday": "work", "Wednesday": "work", 3 "Thursday": "work", "Friday": "work", 4 "Saturday": "holiday", "Sunday": "holiday" 5}

こういうふうに作っても良いですが、タイプ数は劇的には変わらないです。

Python

1AB = { 2 **{k: 'work' for k in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']}, 3 **{k: 'holiday' for k in ['Saturday', 'Sunday']} 4}

辞書を諦めて関数にしても良いでしょう。

Python

1def AB(k): 2 if k in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']: 3 return 'work' 4 if k in ['Saturday', 'Sunday']: 5 return 'holiday' 6 7 raise ValueError

複数キーでアイテムを獲得できるクラスを自作するのはそこまで面倒では無いですが、
実装にハッシュテーブルが使えないので機能面で劣ります。


検索キーが常に単一なら充分高速に実装できますね。

Python

1class MultipleDict(dict): 2 def __setitem__(self, keys, value): 3 for key in keys: 4 dict.__setitem__(self, key, value) 5 6md = MultipleDict() 7md[0, 1, 2] = 42 8md[9, 8, 7] = 6 9 10print(md) # => {0: 42, 1: 42, 2: 42, 9: 6, 8: 6, 7: 6}

逆に面倒くさくなるだけな気がしますが。

投稿2019/07/02 07:03

編集2019/07/02 07:19
LouiS0616

総合スコア35660

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

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

NEKOMONDO

2019/07/02 07:30

LouiS0616様 複数もの参考になる回答ありがとうございます。とても勉強になります。 辞書で書く質問のプログラムを書く場合は、素直に書くのが一番なのですね。 また、辞書の概念に拘らず、独自の関数や検索キーなどの新たな視点からプログラムを作る方法を教えていただきありがとうございます。これからも、質問などをさせて頂く際よろしくお願いいます。
NEKOMONDO

2019/07/02 07:32

また、LouiS0616様フォローをさせて頂きます。よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問