我有一本字典d1
和一个列表l1
。在
字典键是字符串,值是我自己定义的对象。如果有帮助,我可以更详细地描述对象,但是现在,对象有一个列表属性names
,并且{l1
中,也可能不会出现。在
我想做的是丢弃字典d1
的任何元素,其中该元素中对象的name
属性不包含{
举个小例子:
l1 = ['cat', 'dog', 'mouse', 'horse', 'elephant',
'zebra', 'lion', 'snake', 'fly']
d1 = {'1':['dog', 'mouse', 'horse','orange', 'lemon'],
'2':['apple', 'pear','cat', 'mouse', 'horse'],
'3':['kiwi', 'lime','cat', 'dog', 'mouse'],
'4':['carrot','potato','cat', 'dog', 'horse'],
'5':['chair', 'table', 'knife']}
因此,生成的字典或多或少是相同的,但是每个列表的元素将是从1
到{l1
中。在
像这样的一个字典/I用来做这个列表:
^{pr2}$这似乎是可行的,但对于大字典,7000多个条目,大约需要20秒来完成。就其本身而言,并不可怕,但我需要在一个循环中执行此操作,该循环将迭代10000次,因此目前不可行。有什么关于如何快速完成的建议?在
输出:
^{pr2}$或者:
{{1>计算列表中每个值的交集。对于集合交集使用列表是相当低效的,因为涉及到线性搜索。您应该将
l1
转换为一个集合,并使用set.intersection()
或集合成员资格测试(取决于结果再次是一个集合是否可以接受)。在完整代码可以如下所示:
与两种字典理解不同,在这里使用单个
^{pr2}$for
循环可能更好:问题不在于dict理解,而是其中的嵌套列表理解。每次迭代相同的键。这种事最好用布景来做。在
相关问题 更多 >
编程相关推荐