使用用于查找的布尔值创建字典

2024-06-08 23:53:01 发布

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

我有一本字典和一张单子:

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

我在看这个:
如果字典中的值“cat”出现在mylist的任何元素中,请说“cat 63663”

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

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

而不是

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

我无法迭代,因为两个iterable的长度都不匹配。你知道吗


Tags: 元素labels字典labelcat词典单子jpg
2条回答

您可以尝试一个dict comprehension,它包括一个(嵌套的)列表comprehension[Python 3.Docs]: Data Structures - Nested List Comprehensions)。需要注意的是,语法非常复杂,性能也不是最好的。你知道吗

>>> labels = {'cat_01.jpg': ['cat'], 'Poodle_07927.jpg': ['poodle'], 'duck_02.jpg': ['duck']}
>>> animal_list = ['cat 63663', 'dog 4636773', 'wolf 87487', 'croc 1331', 'bird 01']
>>>
>>> new_labels = {k: v + [item1 for item0 in v for item1 in animal_list if item0 in item1.split()] for k, v in labels.items()}
>>>
>>> new_labels
{'cat_01.jpg': ['cat', 'cat 63663'], 'Poodle_07927.jpg': ['poodle'], 'duck_02.jpg': ['duck']}

下面是一个方法:

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循环比使用dictionary快,因为您不必遍历每个dictionary键的动物列表。更新是以另一种方式进行的,下面是性能比较:

For循环:

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

@CristiFati字典理解:

  • 每个回路965 ms±56 ms(7次运行的平均值±标准偏差,每个回路1次)

相关问题 更多 >