问题描述
我正在尝试将一个值附加到字典中已经存在的键上。
我遇到了这个SO链接How do I append a value to dict key? (AttributeError: 'str' object has no attribute 'append'),但是在这种情况下,值是整数,而在我的情况下,值是字符串。
我想要的是:
mydict = {'ADE':'AD','RS':'S'}
key1 = 'ADE'
value1 = 'AE'
if key1 in mydict:
mydict[key1].append(value1)
else:
mydict[key1] = value1
我想附加到mydict['ADE']
上,使其等于['AD','AE']
。
但是,这会生成一个AttributeError: 'str' object has no attribute 'append'
我什至尝试了以下方法:
from collections import defaultdict
d = defaultdict(list)
mydict = {'ADE':'AD','RS':'S'}
for key,value in mydict.items():
d[key] = value
d
然后= defaultdict(list,{'ADE': 'AD','RS': 'S'})
然后我运行以下命令:
key1 = 'ADE'
value1 = 'AE'
if key1 in d:
d[key1].append(value1)
else:
d[key1] = value1
但是我遇到相同的错误:AttributeError: 'str' object has no attribute 'append'
解决方法
mydict[key1]
是str
(str
对象-类str
的对象)。 mydict[key1].append(value1)
尝试调用此append
对象的str
方法。
str
对象不是具有append
方法,这正是错误消息告诉您的内容:“'str'对象没有属性'append'”
如果要将数据追加到某物,请使用一个集合,例如列表:
mydict = {'ADE': ['AD'],'RS': ['S']}
if key1 in mydict:
mydict[key1].append(value1)
else:
mydict[key1] = [value1]
,
由于存在密钥ADE
,因此list
工厂未使用,因此错误不可避免。
您可能在一开始就使用列表工厂,因此if .. in ..
毫无用处,因为defaultdict
的目的是让您自己进行检查
from collections import defaultdict
d = defaultdict(list)
mydict = {'ADE': 'AD','RS': 'S'}
for key,value in mydict.items():
d[key].append(value)
key1 = 'ADE'
value1 = 'AE'
d[key1].append(value1)
print(d) # defaultdict(<class 'list'>,{'ADE': ['AD','AE'],'RS': ['S']})
,
附加值是什么意思? ADE是关键,而AE是值。您是否正在尝试将值更改为AD? 还是您正在尝试执行类似AE + AD = AEAD的操作并将其分配给ADE键? 您的问题不清楚。
您遇到的错误是因为d [key1]是一个字符串值。字符串类型没有附加函数。