私は、「所属名」がすべて同じ辞書エントリを見つけて除外しようとすると、APIの検索結果を除外しようとしています。リスト内の文字列を比較する
短いストーリーを省略すると、下のコードでは、entry2は、すべてが辞書内のネストされた20の辞書の1つです。そのうちの1つは「所属」です。 entry2の各要素に対するこのネストされた辞書の「所属」の中で、私は 'affilnames'を比較し、それらがすべて等しいとは限らない場合、問題のentry2辞書要素を新しいリストentry3に渡す。
(すべてENTRY2辞書のみを「所属」内2つのリストの要素を持っているので)これまでのところ、私は次のようしている:
entry3 = [s for s in entry2 if s['affiliation'][0]['affilname'] != s['affiliation'][1]['affilname']]
正常に動作します(とリターンが9つの辞書のエントリを持つentry3)。しかし、「所属」内に2つのリストエントリしか存在しない場合もありますので、「所属」内のすべての文字列を比較する方法を探したいと思います。私は、論理的に私には理にかなって、次のコード行を持っていますが、ENTRY2として辞書の要素の数が同じものとしてentry3を返して:
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']]
は、誰もが何が起こっているかで私を助けることができるの?あなたのリスト内包の
おかげ
可読性!!!あなたが読めないコードを書いている限り、あなたは問題を抱えています...この行は少なくとも3つの別々の行に分割する価値があります。 '' foo = s ['affiliation'] 'をキャッシュし、' range() 'の代わりに' 'any(bar ['affilname']' 'foo [1:-1]' 'bar'')を使用します。スポットに。もちろん、 'foo'と' bar'を使わずに意味のある名前を選んでください:) –