1. ホーム
  2. python

[解決済み] dictオブジェクトの複数のキーに一度に同じ値を割り当てることは可能ですか?

2023-08-13 15:06:42

質問

Pythonで、以下のような辞書オブジェクトが必要です。

{'a': 10, 'b': 20, 'c': 10, 'd': 10, 'e': 20}

を組み合わせることで、うまく取得することができました。 dict.update()dict.fromkeys() はこのように機能します。

myDict = {}
myDict.update(dict.fromkeys(['a', 'c', 'd'], 10))
myDict.update(dict.fromkeys(['b', 'e'], 20))

しかし、このコードは、時々キーや値を追加する必要があるような初心者のユーザーのために書かれているので、私は次のような単純な骨組みの(Perlのような)構文を好みます。

myDict = {}
myDict['a', 'c', 'd'] = 10
myDict['b', 'e'] = 20

しかし、これは私に与える。

myDict = {('a', 'c', 'd'): 10, ('b', 'e'): 20}

最初の例を単純化する方法はありますか? dict.update()dict.fromkeys() を追加して、私が探しているdictオブジェクトを取得することができますか?

あるいは、2番目の例のようにタプルを持つdictがある場合、次のようなルックアップを行う簡単な方法はありますか? myDict['c'] または myDict.get('c') で、値10を取得しますか?

どのように解決するのですか?

あなたが持っているものは、次のとおりです。 非常に シンプルであり、あなたはそれをわずかに改善することができます。

my_dict = dict.fromkeys(['a', 'c', 'd'], 10)
my_dict.update(dict.fromkeys(['b', 'e'], 20))

キーがタプルであれば、こうすることもできます。

>>> my_dict = {('a', 'c', 'd'): 10, ('b', 'e'): 20}
>>> next(v for k, v in my_dict.items() if 'c' in k)      # use .iteritems() python-2.x
10

これはもちろん、与えられた要素を含むキーに最初に出会った値を返します。