我試圖通過嘗試查找和排除具有「聯屬名稱」的詞典條目來篩選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',但選擇一些有意義的名字...... :) –