Python字典出错:str对象没有属性追加

时间:2013-10-08 01:04:21

标签: python

我在python中编写代码。 我的输入行是“all / DT remaining / VBG all / NNS of / IN”

我想创建一个包含一个键和多个值的字典 例如 - 全部:[DT,NNS]

groupPairsByKey={}
Code:
for line in fileIn:
    lineLength=len(line)
    words=line[0:lineLength-1].split(' ')
    for word in words:
        wordPair=word.split('/')
                  if wordPair[0] in groupPairsByKey:
                    groupPairsByKey[wordPair[0]].append(wordPair[1])
<getting error here>
                  else:
                    groupPairsByKey[wordPair[0]] = [wordPair[1]]

3 个答案:

答案 0 :(得分:2)

虽然我觉得你应该得到一个IndentationError,如果你收到消息

  

str对象没有属性追加

那就意味着

groupPairsByKey[wordPair[0]]

str,而str没有附加方法。


您发布的代码未显示

的方式
groupPairsByKey[wordPair[0]]

可能有str值。也许放

if wordPair[0] in groupPairsByKey:
    if isinstance(groupPairsByKey[wordPair[0]], basestring):
        print('{}: {}'.format(*wordPair))
        raise Hell

进入你的代码以帮助追查罪魁祸首。


您还可以使用collections.defaultdict

来简化代码
import collections
groupPairsByKey = collections.defaultdict(list)
for line in fileIn:
    lineLength=len(line)
    words=line[0:lineLength-1].split(' ')
    for word in words:
        wordPair=word.split('/')
        groupPairsByKey[wordPair[0]].append(wordPair[1])

当您使用缺少的密钥访问defaultdict时,将调用工厂函数(在本例中为list),并将返回的值用作defaultdict中的关联值}。因此,只要遇到丢失的密钥,就会自动将新的键值对插入defaultdict。由于默认值始终是列表,因此您不会遇到错误 str object has no attribute append了 - 除非你有 重新分配旧键值对的代码,其值为str

答案 1 :(得分:0)

你可以这样做:

my_dict["all"] = my_string.split('/')

在Python中,

答案 2 :(得分:0)

您的问题是groupPairsByKey[wordPair[0]]不是列表,而是字符串!

在将值附加到groupPairsByKey['all']之前,您需要将值设为列表。

您的解决方案已经正确,在我的情况下它完美无缺。尽量确保groupPairsByKey是一个完全空的字典。

顺便说一下,这就是我的尝试:

>>> words = "all/DT remaining/VBG all/NNS of/IN".split
>>> for word in words:
    wordPair = word.split('/')
    if wordPair[0] in groupPairsByKey:
        groupPairsByKey[wordPair[0]].append(wordPair[1])
    else:
        groupPairsByKey[wordPair[0]] = [wordPair[1]]


>>> groupPairsByKey
{'of': ['IN'], 'remaining': ['VBG'], 'all': ['DT', 'NNS']}
>>> 

此外,如果您的代码格式与您在此处发布的代码类似,则会出现缩进错误。

希望这有帮助!