Python问题:
我有一个默认字典/字典,比如a [1] = (1,2,3)
,这样a [1] [0] = 1
等等。
现在我想在同一个键上添加值的列表。请注意,我不想追加,而是在同一个列表中添加更多的值。例如,我想在键a[1]中添加5,但仅在单个列表中:
a[1][1].append("5") = (1, [2,5], 3)
有什么可以帮助我完成这个任务的吗?
Python问题:
我有一个默认字典/字典,比如a [1] = (1,2,3)
,这样a [1] [0] = 1
等等。
现在我想在同一个键上添加值的列表。请注意,我不想追加,而是在同一个列表中添加更多的值。例如,我想在键a[1]中添加5,但仅在单个列表中:
a[1][1].append("5") = (1, [2,5], 3)
>>> d = {'a': [0, 1, 2], 'b': [1, 2, 3]}
>>> d['a'].append(3)
>>> d['a']
>>> [0, 1, 2, 3]
您似乎在使用元组而不是列表。虽然您可以这样做,但是由于元组是不可变的,因此无法在它们上调用append
方法;您必须用新的更大的元组替换它们。就像这样:
>>> d = {'a': (0, 1, 2), 'b': (1, 2, 3)}
>>> d['a'] = d['a'] + (3,)
>>> d['a']
>>> (0, 1, 2, 3)
>>> d = {'b': (1, 2, 3)}
>>> d['a'] = d['a'] + (3,)
KeyError: 'a'
>>> d = defaultdict(tuple, {'b': (1, 2, 3)})
>>> d['a'] = d['a'] + (3,)
>>> d
{'b': (1, 2, 3), 'a': (3,)}
同时,看起来你正在尝试使用一种通常为每个键存储单个值的结构,但在第一次需要扩展它时可以神奇地转换为多个值。在一般情况下,这是有歧义的-无法区分单个值是否恰好是元组或列表与多个值。您可以在特定情况下执行此操作,其中您知道您的值永远不会是集合(但请记住,字符串是字符串的集合;这将在某些时候困扰您…)或可能是集合,但永远不会是您正在使用的特定类型的集合。但因为这通常不是一个好主意,Python并没有使其易于实现。因此,您必须执行类似于以下内容的操作:
def add_to_multidict(multidict, key, value):
if key in multidict:
if isinstance(multidict[key], tuple):
multidict[key] = multidict[key] + (value,)
else:
multidict[key] = (multidict[key], value)
else:
multidict[key] = value
dict
并编写相应的方法。如果你想将其作为值的方法调用,则还需要子类化tuple
,并使字典子类使用元组子类。
d['a'][1][2][1].append(3)
,那么你需要进行递归:元组子类只需在扩展值时创建自身的实例,而不是创建元组。a[1] = [[1], [2], [3]]
a[1][1].append(5) # -> [[1], [2, 5], [3]]
目前不清楚您想要实际做什么;可能有更好的方法来完成它。