首页 > 解决方案 > 使用布尔值进行查找以创建字典

问题描述

我有一个字典和一个列表:

labels = {'cat_01.jpg': ['cat'], 'Poodle_07927.jpg': ['poodle'], 'duck_02.jpg': ['duck']}


mylist = ['cat 63663' ,'dog 4636773' ,'wolf 87487','croc 1331', 'bird 01']

请注意len()字典的不等于mylist

我正在看这个:
如果 mylist 的任何元素中存在的字典中的值“cat”说“cat 63663”

我希望将该元素附加到我的值中。
我正在寻找更新字典的输出:

label['cat_01.jpg'] = ['cat','cat 63663'] 

代替

label['cat_01.jpg'] = ['cat'] 

我无法迭代,因为两个迭代的长度不匹配。

标签: pythonpython-3.xlistcomparison

解决方案


这是一种方法:

animal = [x.split('_')[0] for x in list(labels.keys())]
for element in mylist:
    current_animal = element.split(' ')[0]
    if current_animal in animal:
        labels[list(labels.keys())[animal.index(current_animal)]].append(element)

使用 for 循环比使用字典更快,因为您不必为每个字典键遍历动物列表。更新是相反的,这是一个性能比较:

对于循环:

  • 每个循环 5.21 µs ± 20.2 ns(平均值 ± 标准偏差。7 次运行,每次 100000 次循环)

@CristiFati 字典理解:

  • 每个循环 965 毫秒 ± 56 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)

推荐阅读