【发布时间】:2021-08-24 22:19:09
【问题描述】:
我知道这里有一些类似的帖子,但是我尝试了每种解决方案,但没有一个适合我的场景。
我有一本复杂的字典,里面有很多列表和其他字典。看起来像这样:
data = {'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'results': [{'id': 'id1_value',
'label1': 'label1_value',
'label2': 'label2_value',
'fields': {'field1': 'field1_value',
'field2': 'field2_value',
'field3': 'field3_value'},
'label3': 'label3_value',
'label4': 'label4'},
{'id': 'id2_value',
'label1': 'label1_value',
'label2': 'label2_value',
'fields': {'field1': 'field1_value',
'field2': 'field2_value',
'field3': 'field3_value'},
'label3': 'label3_value',
'label4': 'label4'}]}
我想创建一个从该字典中提取某些值的数据框。具体来说,我想要以下内容:
| id | label2 | field2 | field3 |
|---|---|---|---|
| id1 | label2_value | field2_value | field3_value |
| id2 | label2_value | field2_value | field3_value |
我尝试创建一个空白列表,然后循环遍历数据结构,将我想要的各种元素保存到变量中,然后将它们附加到我的列表中。最后从列表中创建一个 df 。我使用了以下代码:
mylist = []
data_results = data['results']
for x in data_results:
id = data_results['id']
label2 = data_results['label2']
fields = x['fields']
for x in fields:
field2 = fields['field2']
field3 = fields['field3']
mylist.append([label2,body,byline])
pd.DataFrame(mylist)
但是它不起作用,我得到了各种错误(例如“TypeError:列表索引必须是整数或切片,而不是 str”)或者我只得到一个元素而不是其他元素。
有什么建议吗?谢谢!
【问题讨论】:
-
data_results是一个字典列表,所以data_results['id']会失败。您应该在 for 循环中使用x作为id = x['id']等等。 -
您的示例代码似乎没有定义“body”或“byline”,并且(正如@alexis 在下面指出的那样),重用像“x”这样的变量名称是一个麻烦的秘诀。 .. 而你的内部循环实际上并没有使用“x”,这似乎是一个错误。
标签: python json pandas loops dictionary