将多个值列表添加到字典不会创建相同的值顺序

2024-09-28 14:53:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Clarifai的API将返回的响应写入CSV。对于我提交的每个图像,我希望获取前5个图像,并将它们的元数据附加到数据帧中的一行中,第一列是file_id。所以每个图像将有5行,每个连续的列中都会附加元数据。我似乎正在生成一些字典条目,其中所附加的列表中的值的顺序没有保留,我正在试图找出原因。这是我正在迭代的一个示例响应

    [score: 0.8935652375221252
input {
  id: "1002648140"
  data {
    image {
      url: "https://images.lowes.com/product/converted/192665/192665007798.jpg"
      hosted {
        prefix: "https://s3.amazonaws.com/clarifai-api/img3/prod"
        suffix: "3617f25f9ee5463497e7abf350091b93/c1ee1a24260772d532f0d371ac08fb06"
        sizes: "orig"
        sizes: "tiny"
        sizes: "small"
        sizes: "large"
      }
    }
    metadata {
      fields {
        key: "cat_entry_id"
        value {
          string_value: "1002648140"
        }
      }
      fields {
        key: "catalog_name"
        value {
          string_value: "Roses"
        }
      }
      fields {
        key: "catalog_path"
        value {
          string_value: "Outdoors$Plants & Planters$Plants, Bulbs & Seeds$Roses"
        }
      }
      fields {
        key: "link_url"
        value {
          string_value: "https://www.lowes.com/pd/Spring-Hill-Nurseries-in-Bare-Root-Red-Flowering-Blaze-Climbing-Rose/1002648140"
        }
      }
      fields {
        key: "product_name"
        value {
          string_value: "Spring Hill Nurseries in Bare Root Red Flowering Blaze Climbing Rose"
        }
      }
    }
    clusters {
      id: "985_203"
    }
  }
  created_at {
    seconds: 1599796898
    nanos: 391916000
  }
  modified_at {
    seconds: 1599798078
    nanos: 291417000
  }
  status {
    code: INPUT_DOWNLOAD_SUCCESS
    description: "Download complete"
  }
}
annotation {
  id: "c588c2f17f01465f94bde2d2c2e5687f"
  input_id: "1002648140"
  data {
  }
  status {
    code: ANNOTATION_SUCCESS
    description: "Annotation success"
  }
  created_at {
    seconds: 1599798076
    nanos: 759651000
  }
  modified_at {
    seconds: 1599798076
    nanos: 759651000
  }
  model_version_id: "bb186755eda04f9cbb6fe32e816be104"
}
, score: 0.8807249665260315
input {
  id: "1000383061"
  data {
    image {
      url: "https://images.lowes.com/product/converted/743425/743425079649.jpg"
      hosted {
        prefix: "https://s3.amazonaws.com/clarifai-api/img3/prod"
        suffix: "3617f25f9ee5463497e7abf350091b93/756b268566daea823f07248208c05e21"
        sizes: "orig"
        sizes: "tiny"
        sizes: "small"
        sizes: "large"
      }
    }
    metadata {
      fields {
        key: "cat_entry_id"
        value {
          string_value: "1000383061"
        }
      }
      fields {
        key: "catalog_name"
        value {
          string_value: "Annuals"
        }
      }
      fields {
        key: "catalog_path"
        value {
          string_value: "Outdoors$Plants & Planters$Plants, Bulbs & Seeds$Annuals"
        }
      }
      fields {
        key: "link_url"
        value {
          string_value: "https://www.lowes.com/pd/3-Quart-Purple-Purple-Garden-Mum-in-Pot/1000383061"
        }
      }
      fields {
        key: "product_name"
        value {
          string_value: " 3-Quart Purple Purple Garden Mum in Pot"
        }
      }
    }
    clusters {
      id: "54_203"
    }
  }
  created_at {
    seconds: 1599795418
    nanos: 883441000
  }
  modified_at {
    seconds: 1599795429
    nanos: 301624000
  }
  status {
    code: INPUT_DOWNLOAD_SUCCESS
    description: "Download complete"
  }
}
annotation {
  id: "91434754e4bd425ba3c528be9cd901e0"
  input_id: "1000383061"
  data {
  }
  status {
    code: ANNOTATION_SUCCESS
    description: "Annotation success"
  }
  created_at {
    seconds: 1599795427
    nanos: 683212000
  }
  modified_at {
    seconds: 1599795427
    nanos: 683212000
  }
  model_version_id: "bb186755eda04f9cbb6fe32e816be104"
}

我正在使用一个字典,将元数据的值添加为一个列表,但没有得到与所附加列表相同的顺序。请参阅以下示例词典以供参考

{'test_output/fe_IMG_0574.jpg_0': ['Outdoors$Plants & Planters$Plants, Bulbs & Seeds$Roses',
  'https://www.lowes.com/pd/Spring-Hill-Nurseries-in-Bare-Root-Red-Flowering-Blaze-Climbing-Rose/1002648140',
  'Roses',
  'Spring Hill Nurseries in Bare Root Red Flowering Blaze Climbing Rose',
  '1002648140'],
 'test_output/fe_IMG_0574.jpg_1': ['https://www.lowes.com/pd/3-Quart-Purple-Purple-Garden-Mum-in-Pot/1000383061',
  '1000383061',
  ' 3-Quart Purple Purple Garden Mum in Pot',
  'Outdoors$Plants & Planters$Plants, Bulbs & Seeds$Annuals',
  'Annuals'],
 'test_output/fe_IMG_0574.jpg_2': ['https://www.lowes.com/pd/4-Count-Dahlia-Bulbs-L3480/1000151071',
  '1000151071',
  ' 4 Count Dahlia Bulbs (L3480)',
  'Outdoors$Plants & Planters$Plants, Bulbs & Seeds$Plant Bulbs',
  'Plant Bulbs']}

这将创建一个数据帧,该数据帧在看起来像零星行的列中具有不同的值。这是我用来生成这个的代码

final_dict = {}


    for i in range(5):
        response_object = response.hits[i].input.data.metadata.items()
        final_list = []
        url = response_object[0][1]
        product_name = response_object[1][1]
        catalog_entry_id = response_object[2][1]
        catalog_path = response_object[3][1]
        catalog_name = response_object[4][1]

        final_list.append(url)
        final_list.append(catalog_entry_id)
        final_list.append(product_name)
        final_list.append(catalog_path)
        final_list.append(catalog_name)

        final_dict[file_id+'_'+str(i)] = final_list

print(final_dict)
final_df =  pd.DataFrame.from_dict(final_dict, orient='index')

请看下面几行作为我的意思的示例 enter image description here


Tags: keynameinhttpscomidfieldsstring
1条回答
网友
1楼 · 发布于 2024-09-28 14:53:44

这是为了子孙后代。新的Clarifai GRPC客户端具有不同的数据结构。因此,我必须首先列出字段来解析它们。这就是我最后一个循环的样子。它添加了列表字段行

for i in range(5):
    response_object = response.ListFields()[1]
    test_meta = response_object[1][i].input.data.metadata
    final_list = []
    url = test_meta['link_url']
    product_name = test_meta['product_name']
    catalog_entry_id = test_meta['cat_entry_id']
    catalog_path = test_meta['catalog_path']
    catalog_name = test_meta['catalog_name']

    final_list.append(i+1)
    final_list.append(url)
    final_list.append(catalog_entry_id)
    final_list.append(product_name)
    final_list.append(catalog_path)
    final_list.append(catalog_name)

    final_dict[file_id+'_'+str(i)] = final_list

相关问题 更多 >