リスト内包表記の中に辞表があるかどうかを確認するにはどうすればよいですか?リスト内包表記の中に辞書があるかどうかチェックする
私はこのようにしようとしている:Falseを返す
print dict in [company["attribute"] for company in dictionary["companies"]]
、それがtrueを返すとき。
ありがとうございました。
リスト内包表記の中に辞表があるかどうかを確認するにはどうすればよいですか?リスト内包表記の中に辞書があるかどうかチェックする
私はこのようにしようとしている:Falseを返す
print dict in [company["attribute"] for company in dictionary["companies"]]
、それがtrueを返すとき。
ありがとうございました。
print any(map(lambda x: isinstance(x, dict), [company... ]))
が有効です。
このコードの機能について教えてください。 –
'[company ...]'は、あなたが使っているリスト理解のためのショートカットです。 'lambda x:isinstance(x、dict)'は、引数が 'dict'オブジェクトの場合は' True'を返し、それ以外の場合は 'False'を返します。 'map(lambda ...、[company ...])'は '[company ...]'リストを 'lambda ...を呼び出した結果のリストに変換します。'関数はその要素に作用するので、最初の要素として' dict'が続き、その後に2つの非dictsが続くリストの場合は、[True、False、False、...]のようになります。 'iterable'の要素が真実であれば' any(iterable) 'は' True'を返します。 – mkorvas
dict
はclass
ですので、list
に辞書を作成するこのクラスは尋ねていますか?あなたが本当に知りたいのは、dict
によって作成されたインスタンスがlist
にあるかどうかです。あなたはisinstance
を使って比較することができます。
ディクショナリがリスト内包であるかどうかをチェックしても、実際にはあなたのコードでlist
(リスト内包を使用)が作成されていて、list
にあるかどうかを確認しました。あなたは後でリストを捨てます。これは、マッチするまで最初のいくつかの項目をチェックしたいだけであっても、リスト全体を構築すると非効率です。
あなたはisinstance
でany
を使用することができます。
g = (isinstance(company["attribute"], dict)
for company in dictionary["companies"])
g
は、実際にはまだそれほどのいずれも評価されていない。
print any(isinstance(company["attribute"], dict)
for company in dictionary["companies"])
私のコードは、理解を一般化したものであるジェネレータ式を使用しています属性がdict
のインスタンスかどうかを確認するために属性がチェックされています。ジェネレータが消費され、またはマテリアライズされたときにのみ、結果が評価され、生成されます。発電機として
g
は、値の配列をとる任意の関数に渡すことができる。
print any(g)
any
関数値生成収率を反復します。 any
は、True
と評価され、最初の値で停止する値を探しています。これは、ジェネレータが必要な回数だけ評価され、逐次検索する効率的な方法であることを意味します。
同様に、next
をジェネレータとともに使用して、いくつかの基準に一致する次の値を見つけることができます。実際の辞書を使いたい場合は、次のように言うことができます:
attribute = next(company["attribute"]
for company in dictionary["companies"]
if isinstance(company["attribute"], dict))
この回答は、「** isinstance' **(および 'any')を使用することができます。 – mkrieger1
特定の辞書があるかどうか、またはリストに辞書が含まれているかどうかを確認しますか? –
リストの作成方法はどういう意味ですか? –
辞書がある場合@MosesKoledoye –