我试图通过尝试查找和排除具有“联属名称”的词典条目来筛选API中的搜索结果,这些条目都是相同的。比较列表中的字符串
为了简短起见,在下面的代码中,entry2是一个包含20个字典的列表,其中包含嵌套字典,其中一个是“隶属关系”。在entry2的每个元素的这个嵌套词典的“隶属关系”中,我想比较'affilnames',如果它们不是全部相等,则将有问题的entry2词典元素传递给新列表entry3。
到目前为止,我有以下的(因为所有ENTRY2字典只有在“归属” 2个列表元素):
entry3 = [s for s in entry2 if s['affiliation'][0]['affilname'] != s['affiliation'][1]['affilname']]
的正常工作(并返回entry3有9个词典条目)。但是,并不总是这种情况,在“联属”中只有2个列表条目,所以我想找到一种方法来比较“联属”中的所有字符串。我有下面的代码行这在逻辑上是有道理的我,但正在恢复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']]
谁能帮我到底是怎么回事?
感谢
可读性!只要你编写不可读的代码,你就会一直有问题......这条线至少应该分成三个独立的行。缓存'foo = s ['affiliation']',然后在foo [1:-1])中用'any(bar ['affilname']']代替'range()'等等,然后这个错误会很容易现货。当然,不要使用'foo'和'bar',但选择一些有意义的名字...... :) –