从嵌套的 Python 字典中提取数据

时间:2021-06-07 20:24:16

标签: python json pandas loops dictionary

我知道这里有一些类似的帖子,但是我已经尝试了每个解决方案,但没有一个适用于我的场景。

我有一本复杂的字典,里面装满了列表和其他字典。看起来像这样:


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”)或者我只得到一个元素而不是其他元素。

有什么建议吗?谢谢!

1 个答案:

答案 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']

显示该值的路径,而不是使用中间变量。但这是一个品味问题。

相关问题