我有一个类似这样的字典列表,但是大约有500个条目:
listOfDicts = [{'ID': 1, 'abc': {'123': 'foo'}}, ... {'ID': 7, 'abc': {'123':'foo','456': 'bar'}}]
sampleFilterList = ['123', '456']
我试图过滤列表中的所有结果,其中sampleFilterList中的所有值都在键“abc”中
结果应该是一个列表:
^{pr2}$我试过[i for i in listOfDicts if a for a in sampleFilterList in i['abc']]
,但是我得到了UnboundLocalError: local variable 'a' referenced before assignment
这是一个包含嵌套列表理解的工作版本。您的问题是
a for a in...
是一个列表理解,需要在构造新列表时使用。在您需要将条件测试中的移到列表理解中的for关键字之前,并且使用
get
将更安全,如果您不确定列表中的所有词典是否都有关键字abc
,则返回默认值而不是引发错误:或者如果使用@DYZ的集合,则可以使用
^{pr2}$issubset
:首先,将第二个列表转换为一组,以便进行更有效的比较:
现在,将每个列表项的“abc”键与上述集合进行比较:
^{pr2}$这是最快的解决方案。一种更具python风格(但速度稍慢)的解决方案是使用
filter()
:相关问题 更多 >
编程相关推荐