无法将字符串附加到字典键
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 值未附加。里面的代码
ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault的问题