【问题标题】: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格式的。字符串开头有无效数据

标签: python json dictionary


【解决方案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】:

如果jsonified字符串的前缀未知,可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2018-09-20
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多