我有一个字典列表,我想为“营养素”创建一个DataFrame,并为“ id”添加一列
下面是字典列表的PART。

注意:db是字典的列表,对于每个字典,我有5个键(description..nutrition),每个营养是字典的列表,我希望数据框包含营养中的所有字典,并为'id添加一列'。第一个字典的id是1008。

db=[{u'description': u'Cheese, caraway',
  u'group': u'Dairy and Egg Products',
  u'id': 1008,
  u'manufacturer': u'',
  u'nutrients': [{u'description': u'Protein',
    u'group': u'Composition',
    u'units': u'g',
    u'value': 25.18},
   {u'description': u'Total lipid (fat)',
    u'group': u'Composition',
    u'units': u'g',
    u'value': 29.2},
   {u'description': u'Carbohydrate, by difference',
    u'group': u'Composition',
    u'units': u'g',
    u'value': 3.06}]]

最佳答案

df = pd.DataFrame(db[0]['nutrients'])
df['id'] = df.index
df
                   description        group units  value  id
0                      Protein  Composition     g  25.18   0
1            Total lipid (fat)  Composition     g  29.20   1
2  Carbohydrate, by difference  Composition     g   3.06   2


更新资料

在更好地了解了您的意图之后,我认为这将满足您的需求。这个想法是为所有产品的所有营养成分创建字典列表,并插入ID。

dict_merge = lambda a,b: a.update(b) or a
nuts = [dict_merge(nut, {'id': product['id']}) for product in db for nut in product['nutrients']]
df = pd.DataFrame(nuts)
df
                   description        group    id units  value
0                      Protein  Composition  1008     g  25.18
1            Total lipid (fat)  Composition  1008     g  29.20
2  Carbohydrate, by difference  Composition  1008     g   3.06

10-08 04:22