Python 无法将字符串附加到字典键

Python 无法将字符串附加到字典键,python,dictionary,key,append,key-value,Python,Dictionary,Key,Append,Key Value,我编程不到四个星期,遇到了一个我无法解决的问题。我试图将一个字符串值附加到一个存储有现有字符串的现有键中,但如果该键中已经存在任何值,我会得到“str object没有属性'append' 我已尝试将值转换为list,但这也不起作用。我需要使用.append()属性,因为update只是替换clientKey中的值,而不是附加到已存储的任何值上。经过进一步研究,我现在明白了我需要以某种方式拆分clientKey中存储的值 任何帮助都将不胜感激 data = {} while True:

我编程不到四个星期,遇到了一个我无法解决的问题。我试图将一个字符串值附加到一个存储有现有字符串的现有键中,但如果该键中已经存在任何值,我会得到“str object没有属性'append'

我已尝试将值转换为list,但这也不起作用。我需要使用.append()属性,因为update只是替换clientKey中的值,而不是附加到已存储的任何值上。经过进一步研究,我现在明白了我需要以某种方式拆分clientKey中存储的值

任何帮助都将不胜感激

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的建议。这听起来是简化和压缩代码的一种明智的方法。谢谢这对我的帮助。