比较列表中的字符串

Comparing strings in a list

我试图通过查找和排除 'affiliation names' 完全相同的字典条目来过滤掉来自 API 的搜索结果。

长话短说,在下面的代码中,entry2 是一个包含 20 个词典的列表,所有这些词典中都有嵌套的词典,其中一个是 'affiliation'。在这个嵌套字典 'affiliation' 中,对于 entry2 的每个元素,我想比较 'affilnames',如果它们不相等,则将有问题的 entry2 字典元素传递给新列表 entry3.

到目前为止,我有以下内容(因为所有 entry2 词典在 'affiliation' 中只有 2 个列表元素):

entry3 = [s for s in entry2 if s['affiliation'][0]['affilname'] != s['affiliation'][1]['affilname']]

效果很好(returns entry3 有 9 个字典条目)。但是,'affiliation' 中可能并不总是只有 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']]

谁能帮我看看这是怎么回事?

谢谢

您的列表理解过滤器条件结构不正确。 any returns 一个布尔值,您正在与 affilname 条目进行比较 - 一个字符串。这将 return 所有条目,因为字符串永远不会等于布尔值。

您可以改为检查是否有任何带有 affilname 子句的条目与 category/sub-dict 级别中的第一个 affilname 不匹配:

entry3 = [s for s in entry2 if any(dct['affilname'] != s['affiliation'][0]['affilname'] for dct in s['affiliation'])]

一旦在该子字典级别存在不匹配,任何 中断 和 returns True,这会将条目添加到 entry3