遍历字典列表

Iterate over a list of dict

有这样一个字典列表:

dic = {'image' : np.array, 'image_name' : 'str'}
my_list = [dic_0, dic_1, dic_2, ..., dic_n]

然后我想获取这个字典列表中的所有图像来创建另一个图像列表,它将是:

image_list = [np.array, np.array, np.array, ...]

据我能想到的是:

image_list = []
for dic in dic_list:
    image = dic['image']
    image_list.append(image)
return image_list

有更好的方法吗?

更好的是在事物上可能有点主观。这可以使用列表理解来完成,这是一个 python 功能,可用于缩短这样的循环

image_list = [dic['image'] for dic in dic_list]

只要列表中的所有项目都有图像键,这应该可以工作

是的,你试试这个:

def check(x):
   image_list = []
   for i in x:
       image = x[i]
       image_list.append(image)
   return image_list
req=check(dic)

然后调用校验函数即可。

我会推荐使用 panda 的 json.normalize 在一个漂亮的衬垫中。您可以使用词典或词典列表(我相信这是您的情况)。此函数 returns 一个 pandas 数据框,您可以从中轻松 select 包含图像的列,如下所示:

import numpy as np
import pandas as pd

# your dictionnaries
dic_0 = {'image' : np.array([1,2,3]), 'image_name' : 'img_1'}
dic_1 = {'image' : np.array([6,8,10]), 'image_name' : 'img_2'}
dic_2 = {'image' : np.array([10,20,30]), 'image_name' : 'img_3'}

# your list of dictionnaries
my_list = [dic_0, dic_1, dic_2]

# all of your images stored in a list
all_imgs = pd.json_normalize(my_list)['image'].tolist()
print(all_imgs)

>>> [array([1, 2, 3]), array([ 6,  8, 10]), array([10, 20, 30])]+