在python字典中将值附加到键

2024-04-25 13:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我犯了个错误

AttributeError:“unicode”对象没有属性“append”

对于以下python代码:

getStats提取系统信息并将其放置在dictionary的几个键中,每个键都有一个值,将dictionary写入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”}

谢谢你的帮助!你知道吗


Tags: 文件对象脚本json列表dictionary错误unicode
3条回答

dict['offset']的值是一个字符串。如果要附加新的偏移量,应该将其列为一个列表。在初始化旧dict时,请尝试以下操作:

dict['offset'] = []
dict['offset'].append(newDict['offset']) 

如果您想将每个键和值从一个字典复制到一个新字典,我将使用以下方法:

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'

oldDict['offset']必须包含没有属性append的类型。你知道吗

很可能是共享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()的内容。如果您给它另一个列表,即newDict[“offset”]将拥有的列表,如果您在getStats()中按列表方式进行操作,它将在oldDict[“offset”]中的列表末尾添加该列表

>>> oldDict = {"offset": ["1"]}
>>> oldDict["offset"]
['1']
>>> newDict = {"offset": ["2"]}
>>> newDict["offset"]
['2']
>>> oldDict["offset"].append(newDict["offset"]) 
>>> oldDict["offset"]
['1', ['2']]

如果只想将newDict[“offset”]的值添加到in oldDict[“offset”]中,则需要传递值,在这种情况下,可能需要列表理解:

>>> 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']

相关问题 更多 >