使用过滤器和关联列表筛选图像列表

1 投票
1 回答
752 浏览
提问于 2025-04-17 05:19

我有一个作业,其中一部分要求我定义一个过程过滤描述。简单来说,我有一堆图片想要进行筛选:

images = ["1111.jpg", "2222.jpg", "circle.JPG", "square.jpg", "triangle.JPG"]

现在我有一个关联列表,可以用来过滤这些图片:

assc_list = [ ["numbers", ["1111.jpg", "2222.jpg"]] , ["shapes", ["circle.JPG", "square.jpg", "triangle.JPG"]] ]

我可以使用过滤描述来选择想要应用的关联列表,关键字用冒号包起来:

f = ':numbers:'

我现在不太确定该怎么开始。用简单的话来说,我可以这样想:

  • 过滤器是 ':numbers:'
  • 将每个图片的词条与关联列表中与数字相关的词条进行比较。
  • 如果词条匹配,就把这个词条添加到一个空列表中。

现在我只是想让我的代码只打印出数字关联列表中的词条,但它却打印出了所有的词条。

def process_filter_description(f, images, ia):

    return_list = []

    f = f[1:-1]

    counter = 0

    if f == ia[counter][0]:
        #print f + ' is equal to ' + ia[counter][0]

        for key in ial:
            for item in key[1]:
                #print item
                #return_list.append(item)

    return return_list

1 个回答

2

与其使用“关联列表”,不如用字典怎么样?

filter_assoc = {'numbers': ['1111.jpg', '2222.jpg'] ,
                'shapes':  ['circle.JPG', 'square.jpg', 'triangle.JPG']}

现在,看看每个组里有哪些图片:

>>> filter_assoc['numbers']
['1111.jpg', '2222.jpg']
>>>
>>> filter_assoc['shapes']
['circle.JPG', 'square.jpg', 'triangle.JPG']

你的处理函数会变得简单很多:

def process_filter_description(filter, association):
  return association[filter[1:-1]]

我在这里随便想想,这就是我会用来执行字典任务的一个函数:

def process_filter_description(index, images, association):
  return_list = []
  index = index[1:-1]

  for top_level in association:
    if top_level[0] == index:
      for item in top_level[1]:
        return_list.append(item)

      break

  return return_list

撰写回答