【问题标题】:Is there a way to select particular key value of dictionary present in a list of dictionaries有没有办法选择字典列表中存在的字典的特定键值
【发布时间】:2018-07-31 15:13:02
【问题描述】:

我目前正在使用 for 循环来打印字典的所有必需键值对。但是有没有更简单的方法来选择所需的键值对?

        for i in (out['elements']):
            out = (i['insights'][0]['details']['socialInfo'])
            out_temp.append(out)

out的内容实际上是一个带有字典列表的JSON,每个字典都包含一个字典列表。

【问题讨论】:

  • “必需”对是什么意思?您能否发布一个可能在 out 中的 JSON 示例,以及您想要的输出是什么?
  • first key value of dictionary是什么意思?字典不是序列,即不存储位置。使用OrderedDict 可以实现有序字典
  • 有些库可以让您将“关键路径”编写为单个字符串或元组,并使用通配符将其一次性应用于嵌套结构,并返回结果列表(可能是扁平化的) .至少有三种不同的格式,一种基于 XPath,一种基于 Cocoa KVC,一种基于带有大量方括号的类 JavaScript(也类 Python)语法。
  • 例如,您可以写out_temp = path(out, 'elements.*.insights.0.details').flatten() 来获取此列表。如果您对此感兴趣,您应该在 PyPI 中搜索 dpath、kvc 和……我忘记了另一个,但环顾四周,您应该会找到它。
  • 就个人而言,我认为使用原生理解比使用 dpath 通配符更好地处理简单的情况,而复杂的情况通常需要在搜索中使用某种自定义逻辑(至少是错误处理),所以在哪个窗口这些库的用处很小。但是有些人似乎发现用嵌套通配符来思考比我容易得多,或者用循环或其他什么来思考要困难得多。

标签: python json list dictionary


【解决方案1】:

您也可以使用 map 来生成新列表。但我认为你所做的很好,它比其他方法更容易阅读。

out_temp = list(map(lambda x: x['insights'][0]['details']['socialInfo'], out['elements']))

【讨论】:

【解决方案2】:

我看不出有一种明确更简单的方式来访问您需要的数据。但是,您可以通过列表推导更有效地应用您的逻辑:

out_temp = [i['insights'][0]['details']['socialInfo'] for i in out['elements']]

这是否也更简单还有待商榷。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2021-02-10
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多