将值附加到python字典中的键

时间:2018-08-24 15:37:41

标签: python

我遇到错误

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 “}

感谢帮助!

3 个答案:

答案 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'