2024-04-26 04:29:35 发布
网友
我有一个关于我想编一本词典的问题。我的目标是为一个值设置多个键,如下所示:
dictionary = {('a', 'b'): 1, ('c', 'd'): 2} assert dictionary['a'] == 1 assert dictionary['b'] == 1
有什么想法吗?
如果您要经常添加到这个字典中,那么您需要采用基于类的方法,类似于@Latty在这个SO问题中的回答2d-dictionary-with-many-keys-that-will-return-the-same-value。
但是,如果您有一个静态字典,并且您只需要通过多个键访问值,那么您就可以走使用两个字典的非常简单的路线。一个用于存储别名密钥关联,另一个用于存储实际数据:
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)
虽然这是可行的,但我认为如果你想做类似的事情,编写自己的数据结构可能是一条路,尽管它可以使用类似的结构。
如果使用fromkeys,示例将创建多个key:value对。如果不需要,可以使用一个键并为该键创建别名。例如,如果使用寄存器映射,则键可以是寄存器地址,别名可以是寄存器名称。这样就可以在正确的寄存器上执行读/写操作。
fromkeys
>>> mydict = {} >>> mydict[(1,2)] = [30, 20] >>> alias1 = (1,2) >>> print mydict[alias1] [30, 20] >>> mydict[(1,3)] = [30, 30] >>> print mydict {(1, 2): [30, 20], (1, 3): [30, 30]} >>> alias1 in mydict True
我想你是说:
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
如果您要经常添加到这个字典中,那么您需要采用基于类的方法,类似于@Latty在这个SO问题中的回答2d-dictionary-with-many-keys-that-will-return-the-same-value。
但是,如果您有一个静态字典,并且您只需要通过多个键访问值,那么您就可以走使用两个字典的非常简单的路线。一个用于存储别名密钥关联,另一个用于存储实际数据:
如果需要添加到词典中,可以编写这样的函数来使用这两个词典:
虽然这是可行的,但我认为如果你想做类似的事情,编写自己的数据结构可能是一条路,尽管它可以使用类似的结构。
如果使用
fromkeys
,示例将创建多个key:value对。如果不需要,可以使用一个键并为该键创建别名。例如,如果使用寄存器映射,则键可以是寄存器地址,别名可以是寄存器名称。这样就可以在正确的寄存器上执行读/写操作。我想你是说:
d['a']
和d['b']
指向在其更改时“更新”的同一个值,请使该值引用一个可变的对象(如上面这样的用户定义类,或dict
、list
、set
)。d['a']
修改对象时,d['b']
会同时更改,因为它们都指向同一个对象。相关问题 更多 >
编程相关推荐