尽管访问字典中的单个元素,但在使用 "append" 或 "extend" 时更新整个字典
Entire dictionary being updated when using "append" or "extend", despite accessing a single element in the dictionary
我有一本字典,格式为:
dictionary= {reference:annotation}
引用指的是一个位置,注释包含有关该位置的信息。
我想找到重叠的参考位置,并在出现重叠时更新注释。我要更新的注释由 dictionary["reference"].qualifiers["ID"]
访问(注释包含第二个字典,我可以在其中访问我想要的信息)。
如果我尝试使用以下方法向注释添加另一个 ID:d
dictionary[reference].qualifiers["ID"].extend(["new ID"])
或
dictionary[reference].qualifiers["ID"].append("new ID")
我字典中的所有参考注释都将使用该新 ID 进行更新。
但是,如果使用基本列表理解来执行此操作,我会得到所需的结果:
dictionary[reference].qualifiers["ID"] = dictionary[reference].qualifiers["ID"] + ["new ID"]
仅更新该引用处的注释。谁能解释为什么我使用 "append" 或 "extend" 得到不同的结果?
你给出的第一个例子不工作对我有用:
class Annotation:
def __init__(self, initial_val):
self.qualifiers = {'ID': [initial_val]}
an1 = Annotation("foo")
an2 = Annotation("bar")
d = {'ref1' : an1, 'ref2': an2}
print d['ref1'].qualifiers['ID']
print d['ref2'].qualifiers['ID']
d['ref1'].qualifiers['ID'].extend(['new foo'])
print d['ref1'].qualifiers['ID']
print d['ref2'].qualifiers['ID']
结果:
~ mgregory$ python foo.py
['foo']
['bar']
['foo', 'new foo']
['bar']
~ mgregory$
我认为您创建注释的方式有问题 - 可能将浅表副本误认为深表副本,或者类似的数据结构陷阱。
您需要 post 无法运行的实际代码。
作为旁注,您描述为理解的代码不是。它只是使用数组运算符 +
.
我有一本字典,格式为:
dictionary= {reference:annotation}
引用指的是一个位置,注释包含有关该位置的信息。
我想找到重叠的参考位置,并在出现重叠时更新注释。我要更新的注释由 dictionary["reference"].qualifiers["ID"]
访问(注释包含第二个字典,我可以在其中访问我想要的信息)。
如果我尝试使用以下方法向注释添加另一个 ID:d
dictionary[reference].qualifiers["ID"].extend(["new ID"])
或
dictionary[reference].qualifiers["ID"].append("new ID")
我字典中的所有参考注释都将使用该新 ID 进行更新。 但是,如果使用基本列表理解来执行此操作,我会得到所需的结果:
dictionary[reference].qualifiers["ID"] = dictionary[reference].qualifiers["ID"] + ["new ID"]
仅更新该引用处的注释。谁能解释为什么我使用 "append" 或 "extend" 得到不同的结果?
你给出的第一个例子不工作对我有用:
class Annotation:
def __init__(self, initial_val):
self.qualifiers = {'ID': [initial_val]}
an1 = Annotation("foo")
an2 = Annotation("bar")
d = {'ref1' : an1, 'ref2': an2}
print d['ref1'].qualifiers['ID']
print d['ref2'].qualifiers['ID']
d['ref1'].qualifiers['ID'].extend(['new foo'])
print d['ref1'].qualifiers['ID']
print d['ref2'].qualifiers['ID']
结果:
~ mgregory$ python foo.py
['foo']
['bar']
['foo', 'new foo']
['bar']
~ mgregory$
我认为您创建注释的方式有问题 - 可能将浅表副本误认为深表副本,或者类似的数据结构陷阱。
您需要 post 无法运行的实际代码。
作为旁注,您描述为理解的代码不是。它只是使用数组运算符 +
.