如何使用Python从JSON获取单个键的值列表

2024-09-30 22:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些列表,我想得到name的值:

[{
  "tr": [{
      "name": "#For5Rs",
      "promoted_content": null,
      "query": "%23For5Rs",
      "events": null
  }, {
      "name": "Javed Bashir",
      "promoted_content": null,
      "query": "%22Javed+Bashir%22",
      "events": null
  }, {
      "name": "Milan Luthria",
      "promoted_content": null,
      "query": "%22Milan+Luthria%22",
      "events": null
  }, {
      "name": "Vidya Balan",
      "promoted_content": null,
      "query": "%22Vidya+Balan%22",
      "events": null
  }],
  "as_of": "2013-08-16T10:31:35Z",
  "created_at": "2013-08-16T10:20:41Z",
  "locations": [{
      "name": "India",
      "woeid": 23424848
  }]
}]

Tags: name列表contenteventsquerynulltrmilan
3条回答

你在问,“我有一个字典列表。每个字典都有一个键"name"。如何获得所有这些键的值列表?”在

基础知识

  • 使用括号中的索引访问列表元素。a[0]是列表的第一个元素。

  • 使用括号中的键访问字典值。a["name"]this_value,来自{"name":this_value}

  • 使用如下循环聚合值:

    aggregator = []
    for item in a_list:
        aggregator.append(value_calculated_from(item))
    

有疑问的问题

your_list没有方括号对。在

我想是吧

^{pr2}$

回答

您可以得到“name”的值列表:

names = []
for dictionary in list_of_dictionaries:
    if "name" in dictionary:
        names.append(dictionary["name"])
for element in data['tr']:
    print element['name']
    print element['promoted_content']
    print element['query']
    print element['events']

我看到你的数据没有完全格式化(在编辑之前),所以我会选择下面的regex代码从提供的jsonSTRING中提取所有名称(只需将“”括起来)

import re
data="""[{
  "tr": [{
      "name": "#For5Rs",
      "promoted_content": null,
      "query": "%23For5Rs",
      "events": null
  }, {
      "name": "Javed Bashir",
      "promoted_content": null,
      "query": "%22Javed+Bashir%22",
      "events": null
  }, {
      "name": "Milan Luthria",
      "promoted_content": null,
      "query": "%22Milan+Luthria%22",
      "events": null
  }, {
      "name": "Vidya Balan",
      "promoted_content": null,
      "query": "%22Vidya+Balan%22",
      "events": null
  }],
  "as_of": "2013-08-16T10:31:35Z",
  "created_at": "2013-08-16T10:20:41Z",
  "locations": [{
      "name": "India",
      "woeid": 23424848
  }]
"""

names=re.findall(r'(?<="name":\s").+(?=",[\s\S]+"promoted_content")',data)
print names

它会打印一个列表-

^{pr2}$

相关问题 更多 >