作りたい辞書について質問があります。私の目標は、以下のように、単一の値に複数のキーを持つことです。
dictionary = {('a', 'b'): 1, ('c', 'd'): 2}
assert dictionary['a'] == 1
assert dictionary['b'] == 1
何か案は?
作りたい辞書について質問があります。私の目標は、以下のように、単一の値に複数のキーを持つことです。
dictionary = {('a', 'b'): 1, ('c', 'd'): 2}
assert dictionary['a'] == 1
assert dictionary['b'] == 1
何か案は?
私はあなたがこれを意味すると思います:
class Value:
def __init__(self, v=None):
self.v = v
v1 = Value(1)
v2 = Value(2)
d = {'a': v1, 'b': v1, 'c': v2, 'd': v2}
d['a'].v += 1
d['b'].v == 2 # True
d['a']
参照したい場合は、値が変更可能なオブジェクト (上記のようなユーザー定義クラス、または , , )を参照するようにします。d['b']
dict
list
set
d['a']
、d['b']
が同時に変更されます。このディクショナリに頻繁に追加する場合は、クラスベースのアプローチを採用することをお勧めします。 -同じ値。
ただし、静的辞書があり、複数のキーで値にアクセスするだけでよい場合は、2 つの辞書を使用するという非常に単純な方法を使用できます。1 つはエイリアス キーの関連付けを格納するためのもので、もう 1 つは実際のデータを格納するためのものです。
alias = {
'a': 'id1',
'b': 'id1',
'c': 'id2',
'd': 'id2'
}
dictionary = {
'id1': 1,
'id2': 2
}
dictionary[alias['a']]
辞書に追加する必要がある場合は、両方の辞書を使用するために次のような関数を作成できます。
def add(key, id, value=None)
if id in dictionary:
if key in alias:
# Do nothing
pass
else:
alias[key] = id
else:
dictionary[id] = value
alias[key] = id
add('e', 'id2')
add('f', 'id3', 3)
これは機能しますが、同様の構造を使用することもできますが、最終的には、独自のデータ構造を作成することがおそらく進むべき道だと思います。