我试图通过尝试查找和排除具有“联盟名称”的词典条目来过滤掉API中的搜索结果。这些都是一样的。
简而言之,在下面的代码中,entry2是20个词典的列表,其中所有词典都有嵌套词典,其中一个是联盟'。在这个嵌套词典中,联盟'对于entry2的每个元素,我想比较' affilnames'如果它们并非全部相等,则将有问题的entry2字典元素传递给新列表entry3。
到目前为止,我有以下内容(因为所有entry2词典在' affiliation'中只有2个列表元素):
entry3 = [s for s in entry2 if s['affiliation'][0]['affilname'] != s['affiliation'][1]['affilname']]
工作正常(并返回包含9个字典条目的entry3)。但是,并非总是如此,在联盟中只有2个列表条目'所以我想找到一种比较' affiliation'中所有字符串的方法。我有以下代码行,对我来说逻辑上有意义但返回entry3与entry2具有相同数量的字典元素:
entry3 = [s for s in entry2 if any(s['affiliation'][i]['affilname'] for i in range(1,len(s['affiliation'])-1)) != s['affiliation'][0]['affilname']]
任何人都可以帮我解决发生的事情吗?
由于
答案 0 :(得分:2)
列表理解的过滤器条件未正确构建。 any
返回一个布尔值,您将其与affilname
条目进行比较 - 一个字符串。这将返回所有条目,因为字符串永远不会等于布尔值。
您可以检查是否有任何affilname
子条目的条目与该类别/子字典级别中的第一个affilname
不匹配:
entry3 = [s for s in entry2 if any(dct['affilname'] != s['affiliation'][0]['affilname'] for dct in s['affiliation'])]
如果该子网站级别存在不匹配,则任何中断并返回True
,这会将该条目添加到entry3