比较列表中的字符串

时间:2016-09-27 12:06:30

标签: python python-3.5

我试图通过尝试查找和排除具有“联盟名称”的词典条目来过滤掉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']]

任何人都可以帮我解决发生的事情吗?

由于

1 个答案:

答案 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