访问 json 文件列表中的多个字典

Posted

技术标签:

【中文标题】访问 json 文件列表中的多个字典【英文标题】:Access multiple dictionaries inside a list of a json file 【发布时间】:2020-04-11 23:07:12 【问题描述】:

我正在尝试从 json 代码创建一个数据框。但我无法访问列表中的多个对象。仅检索第一个值。

这是我的 json 代码:


['id': '1', 'fnamae': 'Rasab', 'lname': 'Asdaf', 'Age': 21, 'Language': ['python', 'json'], 'parents': 'mother': 'name': 'Mrs. Mother', 'phone': '1212121212', 'father': 'name': 'Mr. Father', 'phone': '1212121212', 'siblings': ['name': 'jamuna', 'phone': 564851312, 'name': 'Killana', 'phone': 1212121212], 'id': '2', 'fnamae': 'Muddassir', 'lname': 'Jameel', 'Age': 25, 'Language': ['React', 'json'], 'parents': 'mother': 'name': 'Mrs. Mutherinlaw', 'phone': 9654512, 'father': 'name': 'Mr. Futherinlaw', 'phone': 53154278, 'siblings': ['name': 'Giallan', 'phone': 998742568, 'name': 'Simba', 'phone': 12355875], 'id': '3', 'fnamae': 'Farhan', 'lname': 'Akhtar', 'Age': 25, 'Language': ['Drupal', 'php'], 'parents': 'mother': 'name': 'Heung min son', 'phone': 89546487, 'father': 'name': 'Kane', 'phone': 4564823545, 'siblings': ['name': 'Xamcs', 'phone': 78654325, 'name': 'sinfbad', 'phone': 45648232]]

这是我从 json 文件中访问“兄弟姐妹”列表以创建数据框的代码。

s = l['siblings']
df2 = pd.DataFrame(s.str[0].values.tolist())
df2

但是输出是:

    name    phone
0   jamuna  564851312
1   Giallan 998742568
2   Xamcs   78654325

我的预期输出是包含兄弟姐妹的多个姓名和电话号码。

    name              phone
0   [jamuna,Killana]  564851312,468451
1   [Giallan,Simba]   998742568,654684
2   [Xamcs, sinfbad]  786543254,654654

当我将代码更改为 s.str[1] 时,我能够检索第二组列表。但是我如何迭代它们

【问题讨论】:

你能发布你的预期输出吗? 我已经更新了我的预期输出。我不需要完全那样。但是列下需要有多个值。 谢谢,非常清楚 :) 我不确定是否有“干净”的方法可以做到这一点,但我已经发布了一个应该可以工作的解决方案 【参考方案1】:

你将不得不做一个嵌套列表理解:

import pandas as pd

pd.DataFrame(
    
        key: [[j[key] for j in i["siblings"]] for i in json_content]
        for key in ["name", "phone"]
    
)

这会给你

|    | name                  | phone                   |
|---:|:----------------------|:------------------------|
|  0 | ['jamuna', 'Killana'] | [564851312, 1212121212] |
|  1 | ['Giallan', 'Simba']  | [998742568, 12355875]   |
|  2 | ['Xamcs', 'sinfbad']  | [78654325, 45648232]    |

【讨论】:

是的。这正是我想要的。欣赏它。【参考方案2】:

使用列表推导推导出输出

pd.DataFrame([d for l in json_content for d in l['siblings']])

【讨论】:

谢谢。但我需要 3 列下的值。列表的名称应该放在一起。我已经更新了我的预期输出。

以上是关于访问 json 文件列表中的多个字典的主要内容,如果未能解决你的问题,请参考以下文章

json_normalize JSON 文件,列表包含字典(包括示例)

json_normalize JSON 文件,具有包含字典的多级列表(包括示例)

JSON数据与Python列表,字典

追加到 json 中转储的字典列表,而不用 python 加载列表

从列表列表创建字典

使用 pandas json_normalize 扁平化包含多个嵌套列表的字典列表