想要从字典格式的字符串中获取值



想要从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

最新更新