【问题标题】:Extracting key and value from tuple of dictionaries (taken from json file) in python在python中从字典元组(取自json文件)中提取键和值
【发布时间】:2022-01-19 11:53:45
【问题描述】:

我有一个 JSON 文件,它是多个字典的元组,我想从其中的一些字典中提取键和值。

文件看起来像这样(这只是随机键和值的结构示例):

file = 
[
    {
        "element": {
            "name": "Ana",
            "bio": "xx",
            "type": "female"
        },
        "ID": "1234",
        "status": "STOPPED"
    },
    {
         "element": {
            "name": "Bob",
            "bio": "xy",
            "type": "male"
        },
        "ID": "5678",
        "status": "STOPPED"
    },
    {
         "element": {
            "name": "Chloe",
            "bio": "xx",
            "type": "female"
        },
        "ID": "8912",
        "status": "STOPPED"
      }
]

我想提取的所有名字(Ana、Bob、Chloe)和他们的 id 是这样的:

安娜 = 1234,
鲍勃 = 5678

等等

无论我已经尝试过什么,都会返回属性错误等。我什至不确定如何正确地遍历它,以便使用 nameID,因为它们没有相同的位置(@987654324 @ 在 element 字典中)。

我什至尝试将文件转换为列表。

【问题讨论】:

  • 好的,所以我们可以假设,在您完成所有 JSON 加载工作之后,您的程序中有一个变量 file,它的值与您运行 Python 代码时的值相同以上?你验证了吗?如果您没有这样的结果,那么您需要确保您了解如何解析 JSON 数据。如果你这样做了,那么你使用它的方式与它来自其他任何地方的方式完全相同。例如:在顶层,它是一个列表,对吗? 你如何获得列表的第一个元素?当你拥有那个元素时,根据它的结构,你将如何获得名称和 ID?
  • “我已经尝试过的任何东西都会返回属性错误等。”我们只能告诉您您实际向我们展示的代码有什么问题,并且我们只能解释我们自己可以实际看到的错误消息。
  • 感谢您的回复。我有 json 文件,我使用 open(file.json) 作为文件并处于读取模式(所以'r')并将其转换为列表。所以可以说:lst = list(file) 之后我想尝试使用 get 所以:list_element = lst.get('element'),这就是我出错的地方。 ``` with open('file.json', 'r') as file: lst = list(file) element = lst.get('element') id = lst.get('ID') for i in range ( len(element)): name = element[0].get('ID') ```
  • 不解析 JSON 数据。当你读取文件时,你只是得到一个字符串,其中{[等符号没有没有特殊含义。将其转换为列表仅意味着每个符号都成为列表的一个元素。您应该使用搜索引擎来学习如何解析 JSON。
  • 我知道负载是如何存在的......但我不确定如何正确使用它,因为它是字典中的字典。这就是为什么我在这里提出问题,以找出答案并学习它。由于我未能在您提到的搜索引擎上找到它。但是,我感谢您的努力并花时间回答并指出我犯的错误,认为此处必须以不同的方式使用负载。谢谢!

标签: python json python-3.x dictionary tuples


【解决方案1】:

首先,您必须打开这个 JSON 文件并让 json 库解析这个文件,从而生成一个加载的字典。请参阅Reading JSON from a file? 了解更多信息。一旦你有了你的字典,我称之为users,你就可以执行这个字典理解了:

import json

# Load the file into a `users` (nested) dictionary
with open("file.json", "r") as f:
    users = json.load(f)

name_to_ids = {
    person["element"]["name"]: person["ID"]
    for person in users
}

哪个输出:

{'Ana': '1234', 'Bob': '5678', 'Chloe': '8912'}

请注意,如果有人姓名重叠,这可能会导致问题!例如:

# I've simply copied this into the .py file for simplicity.
# You'll want to use the JSON parsing method from the Stack Overflow I linked above.
users = [
    {
        "element": {
            "name": "Ana",
            "bio": "xx",
            "type": "female"
        },
        "ID": "1234",
        "status": "STOPPED"
    },
    {
         "element": {
            "name": "Ana",
            "bio": "xy",
            "type": "male"
        },
        "ID": "5678",
        "status": "STOPPED"
    }
]

name_to_ids = {
    person["element"]["name"]: person["ID"]
    for person in users
}

print(name_to_ids)

输出:

{'Ana': '5678'}

【讨论】:

  • 这是一项勇敢的努力,但它不适合 OP 实际存在的问题 - 即实际解析 JSON 数据。
  • 啊,确实。我看到他们的 cmets 揭示了一个更深层次的问题。
  • 谢谢您,非常感谢您的努力。我认为应该以不同的方式使用负载,因为我在 dict 中有 dict 但似乎我错了。感谢您的解释并花时间提供帮助!
  • 幸运的是,没有! json 模块为我们处理一切。
  • 这就是你从c切换到python时的问题啊哈哈。您不习惯不必自己处理所有事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2015-12-19
  • 2015-12-04
  • 2021-09-26
相关资源
最近更新 更多