我在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]]
答案 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']}
>>>
此外,如果您的代码格式与您在此处发布的代码类似,则会出现缩进错误。
希望这有帮助!