【问题标题】:Extract specific value from string in python从python中的字符串中提取特定值
【发布时间】:2019-02-19 00:04:13
【问题描述】:

下面是存储在 str 变量中的输出,我想提取它的基数,我使用简单的方法 print str[15:18] 提取它,但每次如果基数增加,我必须更改字符串值或减少。

输出:

{"cardinality":483,"timestamp":15369087280,"deltas":{"week_over_week":{"delta_fraction":0.047722318876,"last_week_value":146}}}

存储在 str:

str = response.text

预期输出:

Active: 483

【问题讨论】:

  • 您的字符串是 json 内容或 python dict 的字符串表示形式。根据它是什么(它来自哪里?),您想使用json.loads()ast.literal_eval() 将其反序列化为python dict,然后您只需从"cardinality" 键中获取值。
  • 这是来自使用requests库发出的http请求的响应吗?

标签: python


【解决方案1】:

有两种方式:

1.

In [10]: import ast
In [11]: s='{"cardinality":483,"timestamp":15369087280,"deltas":{"week_over_week":{"delta_fraction":0.047722318876,"last_week_value":146}}}'
In [12]: ast.literal_eval(s)
In [13]: %timeit ast.literal_eval(s)['cardinality']
10000 loops, best of 3: 29.4 µs per loop

2.

In [14]: import json
In [15]: s='{"cardinality":483,"timestamp":15369087280,"deltas":{"week_over_week":{"delta_fraction":0.047722318876,"last_week_value":146}}}'
In [16]: %timeit json.loads(s)['cardinality']
100000 loops, best of 3: 5.73 µs per loop

所以你应该使用json,因为它比ast

【讨论】:

    【解决方案2】:

    您可以将字符串作为 JSON 传递来获取字典,然后简单地读出值:

    import json
    s = '{"cardinality": 483, "timestamp": 15369087280, "deltas": {"week_over_week": {"delta_fraction": 0.047722318876, "last_week_value": 146}}}'
    d = json.loads(s)
    print(d['cardinality'])
    # 483
    

    【讨论】:

    • 知道了,谢谢print("Active Users:"),d['cardinality']
    【解决方案3】:

    使用 ast:

    >>> s='{"cardinality":483,"timestamp":15369087280,"deltas":{"week_over_week":{"delta_fraction":0.047722318876,"last_week_value":146}}}'
    >>> import ast
    >>> 'Active: %s'%ast.literal_eval(s)['cardinality']
    'Active: 483'
    >>> 
    

    正如@101所说也可以使用json.loads

    >>> import json
    >>> s='{"cardinality":483,"timestamp":15369087280,"deltas":{"week_over_week":{"delta_fraction":0.047722318876,"last_week_value":146}}}'
    >>> 'Active: %s'%json.loads(s)['cardinality']
    'Active: 483'
    >>> 
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多