访问 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 文件,具有包含字典的多级列表(包括示例)