Python 无法将字符串附加到字典键
我编程不到四个星期,遇到了一个我无法解决的问题。我试图将一个字符串值附加到一个存储有现有字符串的现有键中,但如果该键中已经存在任何值,我会得到“str object没有属性'append' 我已尝试将值转换为list,但这也不起作用。我需要使用.append()属性,因为update只是替换clientKey中的值,而不是附加到已存储的任何值上。经过进一步研究,我现在明白了我需要以某种方式拆分clientKey中存储的值 任何帮助都将不胜感激Python 无法将字符串附加到字典键,python,dictionary,key,append,key-value,Python,Dictionary,Key,Append,Key Value,我编程不到四个星期,遇到了一个我无法解决的问题。我试图将一个字符串值附加到一个存储有现有字符串的现有键中,但如果该键中已经存在任何值,我会得到“str object没有属性'append' 我已尝试将值转换为list,但这也不起作用。我需要使用.append()属性,因为update只是替换clientKey中的值,而不是附加到已存储的任何值上。经过进一步研究,我现在明白了我需要以某种方式拆分clientKey中存储的值 任何帮助都将不胜感激 data = {} while True:
data = {}
while True:
clientKey = input().upper()
refDate = strftime("%Y%m%d%H%M%S", gmtime())
refDate = refDate[2 : ]
ref = clientKey + refDate
if clientKey not in data:
data[clientKey] = ref
elif ref in data[clientKey]:
print("That invoice already exists")
else:
data[clientKey].append(ref)
break
您以字符串值开始,不能对字符串调用
.append()
。请改为以列表值开始:
if clientKey not in data:
data[clientKey] = [ref]
现在
data[clientKey]
引用了一个包含一个字符串的列表对象。列表对象确实有一个append()
方法。如果要继续追加到字符串,可以使用data[clientKey]+=ref
您不能.append()
添加到字符串中,因为字符串是不可变的。如果希望词典值能够包含多个项,则它应该是容器类型,如列表。最简单的方法是首先将单个项添加为列表
if clientKey not in data:
data[clientKey] = [ref] # single-item list
现在您可以整天data[clientkey].append()
解决此问题的一种更简单的方法是使用collections.defaultdict
。这会在项目不存在时自动创建项目,从而使代码更简单
from collections import defaultdict
data = defaultdict(list)
# ... same as before up to your if
if clientkey in data and ref in data[clientkey]:
print("That invoice already exists")
else:
data[clientKey].append(ref)
非常感谢大家的帮助。它正在正常运行。我也很感谢关于defaultdict的建议。这听起来是简化和压缩代码的一种明智的方法。谢谢这对我的帮助。