我遇到错误
AttributeError:“ unicode”对象没有属性“ append”
适用于以下python代码:
getStats提取系统信息并将其放在字典的几个键中,每个键都有一个值,将字典写入json文件,然后脚本停止。 脚本每小时唤醒一次,读取json文件,获取新的getStats示例,并将这些新值附加到适当的键上,以创建列表。
这是脚本的本质:
newDict = getStats()
.
.
.
oldDict['offset'].append(newDict['offset'])
(Attribute error occurs here)
我有一个解决方法,它遍历键的值列表,创建新列表,将新值附加到新列表,然后写入oldDict中的适当键。 似乎很笨拙。...想知道这里是否缺少什么东西。
这是脚本第一次迭代时的json文件:
{“ maxError”:“ 275848”,“ pollingInterval”:“ 512”,“ timeCorrect”:“ 57”,“ driftTime”:“ 21.056”,“ frequency”:“ 21.099”,“ offset”:“ 288.840 “}
感谢帮助!
答案 0 :(得分:3)
dict ['offset']的值是一个字符串。如果要附加新的偏移量,则应将其作为列表。在您初始化oldDict的地方,请尝试以下操作:
dict['offset'] = []
dict['offset'].append(newDict['offset'])
答案 1 :(得分:0)
oldDict ['offset'] 必须包含没有附加属性的类型。
最有可能从共享json中看到一个字符串:
{"maxError": "275848", "pollingInterval": "512", "timeCorrect": "57", "driftTime": "21.056", "frequency": "21.099", "offset": "288.840"}
问题的重制:
>>> oldDict = {"offset": "1"}
>>> newDict = {"offset": "2"}
>>> oldDict["offset"].append(newDict["offset"])
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
您需要将其表示为列表以使用append:
>>> oldDict['offset'] = []
>>> oldDict['offset'].append(newDict['offset'])
请注意传递给 append()的内容。如果您给它另一个列表,如果您在 getStats()中使用列表方式,newDict [“ offset”]将具有该列表,它将在oldDict ['中将列表添加到列表末尾。抵消”]
>>> oldDict = {"offset": ["1"]}
>>> oldDict["offset"]
['1']
>>> newDict = {"offset": ["2"]}
>>> newDict["offset"]
['2']
>>> oldDict["offset"].append(newDict["offset"])
>>> oldDict["offset"]
['1', ['2']]
如果您只想将newDict [“ offset”]的值添加到oldDict [“ offset”]中,则需要传递值,在这种情况下,您可能需要列表理解:< / p>
>>> oldDict = {"offset": ["1"]}
>>> oldDict["offset"]
['1']
>>> newDict = {"offset": ["2"]}
>>> newDict["offset"]
['2']
>>> [oldDict["offset"].append(item) for item in newDict["offset"]]
[None]
>>> oldDict["offset"]
['1', '2']
或在列表上使用 + :
>>> oldDict = {"offset": ["1"]}
>>> newDict = {"offset": ["2"]}
>>> oldDict["offset"] + newDict["offset"]
['1', '2']
答案 2 :(得分:0)
如果您想将每个键和值从一本字典复制到新字典,我将使用以下方法:
oldDict = {}
oldDict['offset'] = 'some_value'
newDict = {}
for key, value in oldDict.items():
newDict[key] = value
如果您只想复制一组具有其值的特定键,则可以使用以下方式:
oldDict = {}
oldDict['offset'] = 'some_value'
oldDict['other'] = 'other_value'
newDict = {}
for key, value in oldDict.items():
if key == 'offset':
newDict[key] = value
这只会添加键和值(如果为'offset'