想从字典格式的字符串中获取值
Posted
技术标签:
【中文标题】想从字典格式的字符串中获取值【英文标题】:Want to get the value from the string which in dictionary format 【发布时间】:2021-07-02 05:43:16 【问题描述】:想从json格式的dictionary中的string中获取值,在本例中选择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'
【问题讨论】:
json.loads
可以将JSON字符串转换成字典,但是字符串不是JSON格式的。字符串开头有无效数据
【参考方案1】:
这是执行此操作的一种方法。首先访问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'
【讨论】:
亲爱的, strip 和 removeprefix 之间有什么困难?看起来几乎一样 当您使用strip
method(例如:'www.example.com'.strip('cmowz.')
)时,参数(在这种情况下为cmowz.
)不是前缀或后缀;相反,它的值的所有组合都被剥离(结果将是'example.com'
)。但在removeprefix(prefix)
的情况下,它只会删除prefix
如果字符串以prefix
开头【参考方案2】:
如果json
ified字符串的前缀未知,可以使用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
【讨论】:
以上是关于想从字典格式的字符串中获取值的主要内容,如果未能解决你的问题,请参考以下文章