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

Posted

技术标签:

【中文标题】无法将字符串附加到字典键【英文标题】:Cannot append string to dictionary key 【发布时间】:2014-07-05 03:38:31 【问题描述】:

我编程不到四个星期,遇到了一个我无法弄清楚的问题。我正在尝试将一个字符串值附加到一个现有的键中,其中存储了一个现有的字符串,但是如果键中已经存在任何值,我会得到“str object has no attribute 'append'。

我尝试将值转换为列表,但这也不起作用。我需要使用 .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

【问题讨论】:

非常感谢大家的帮助。它正在按应有的方式运行。我也很欣赏关于 defaultdict 的建议。这听起来像是一种简化和压缩代码的明智方法。 【参考方案1】:

你从一个字符串值开始,你不能在一个字符串上调用.append()。而是从列表值开始:

if clientKey not in data:
    data[clientKey] = [ref]

现在data[clientKey] 引用了一个包含一个字符串的列表对象。列表对象确实有一个append() 方法。

【讨论】:

谢谢这个帮助我。【参考方案2】:

如果你想继续追加到字符串,你可以使用data[clientKey]+= ref

【讨论】:

【参考方案3】:

你不能.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)

【讨论】:

以上是关于无法将字符串附加到字典键的主要内容,如果未能解决你的问题,请参考以下文章

嵌套字典。合并公共键并将值附加到列表中。 0 值未附加。里面的代码

如何将字典键附加到列表中? [复制]

如何将字符串附加到字典中的列表

Python:将 a 附加到字典中的列表

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault的问题

如何以编程方式将字符串和键添加到 iPhone 中的字典?