【问题标题】:Python- How do I retrieve the multiple values associated with the same key in a dictionary-like json string?Python-如何在类似字典的 json 字符串中检索与同一键关联的多个值?
【发布时间】:2017-05-21 23:33:50
【问题描述】:

好的,所以我有来自网页的 json 源代码,在这个源代码中,同一个词(“作者”)被用作多个值的键。如何检索“作者”的所有值?

例如

"author": "SampleMan", "author":"NonSampleMan", "author":"BoringMan"

如何让 Python 返回["SampleMan", "NonSampleMan", "BoringMan"]

【问题讨论】:

    标签: python arrays json hashtable reddit


    【解决方案1】:

    您可以将object_pairs_hook 传递给json.loads,这将收集具有相同键的值到列表:

    from collections import defaultdict
    import json
    
    s = '{"author": "SampleMan", "author":"NonSampleMan", "author":"BoringMan", "foo":"bar", "bar": [1]}'
    
    def hook(pairs):
        d = defaultdict(list)
        for k, v in pairs:
            d[k].append(v)
    
        return {k: v if len(v) > 1 else v[0] for k, v in d.items()}
    
    print(json.loads(s, object_pairs_hook=hook))
    

    输出:

    {'bar': [1], 'author': ['SampleMan', 'NonSampleMan', 'BoringMan'], 'foo': 'bar'}
    

    在上面的钩子中接收list(key, value) 元组,它存储到defaultdict,其中值是列表。一旦它遍历了元组,它将生成结果dict,如果有多个具有给定键的项目,则值是列表。

    Python 文档中对钩子的描述如下:

    object_pairs_hook 是一个可选函数,将调用使用有序对列表解码的任何对象文字的结果。将使用 object_pairs_hook 的返回值而不是 dict。此功能可用于实现依赖于键值对解码顺序的自定义解码器(例如,collections.OrderedDict() 将记住插入顺序)。如果还定义了 object_hook,则 object_pairs_hook 优先。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多