我知道这里有一些类似的帖子,但是我已经尝试了每个解决方案,但没有一个适用于我的场景。
我有一本复杂的字典,里面装满了列表和其他字典。看起来像这样:
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)
但是它不起作用,我收到各种错误(例如“类型错误:列表索引必须是整数或切片,而不是 str”)或者我只得到一个元素而不是其他元素。
有什么建议吗?谢谢!
答案 0 :(得分:2)
如果您不再使用像 x
这样的通用变量名称,您可能会发现跟踪您正在查找的结构中的位置会更容易:
for result in data['results']:
id_ = result['id']
label2 = result['label2']
fields = result['fields'] # Intermediate variable (note: no loop)
field2 = fields['field2']
field3 = fields['field3']
mylist.append([id_, label2, field2, field3])
你懂的。 (同样在您的代码中,您将 x
用于两个不同的目的,这肯定会带来惊喜。)
如果您的实际结构没有变得更深,您实际上可能会发现编写起来更简单
...
field2 = result['fields']['field2']
显示该值的路径,而不是使用中间变量。但这是一个品味问题。