想要从json格式的dictionary中的字符串获取值,在本例中选择key作为pp-0,预期输出='1000'
Python编码
x = {'d': 'AAAAA@##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'}
x['d'].get('pp-0')
错误消息
AttributeError: 'str' object has no attribute 'get'
预期结果
'1000'
这里有一种方法。首先访问d
密钥,然后剥离AAAAA@##
。这将产生有效的JSON,并且可以通过json
模块反序列化为python对象。
>>> tmp = x['d'].removeprefix("AAAAA@##")
>>> # `removeprefix` method added in python 3.9. If you are using python version
>>> # less than 3.9 you can slice the string instead `x['d'][8:]``
>>> import json
>>> json.loads(tmp).get('pp-0')
'1000'
如果json
化字符串的前缀未知,则可以使用re.sub
:
import json, re
x = {'d': 'AAAAA@##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'}
r = {a:json.loads(re.sub('^[^{]+', '', b)) for a, b in x.items()}
print(r['d'].get('pp-0'))
输出:
1000