簡単な質問:辞書にいくつかのキーが存在するかどうかを確認するための省略形はありますか?辞書のキーのPythonの略語ですか?
'foo' in dct and 'bar' in dct and 'baz' in dct
簡単な質問:辞書にいくつかのキーが存在するかどうかを確認するための省略形はありますか?辞書のキーのPythonの略語ですか?
'foo' in dct and 'bar' in dct and 'baz' in dct
あなたはgenerator expressionでall()
を使用することができます。
>>> all(x in dct for x in ('foo', 'bar', 'qux'))
False
>>> all(x in dct for x in ('foo', 'bar', 'baz'))
True
>>>
それはあなたになんと2つの文字が保存されます(ただし、あなたがチェックする長いリストを持っている場合は、より多くのあなたが保存されます)。パイソン< 2.7の場合
all(x in dct for x in ('foo','bar','baz'))
非常に良い。ありがとう! – davidchambers
+1セクシーです... – sholsapp
{"foo","bar","baz"}.issubset(dct.keys())
、あなたは、オペレータが好きで、別のセットを作成するパフォーマンスを気にしない場合は、上の<=
演算子を使用することができますset(["foo","bar","baz"])
とリテラルセットを交換する必要がありますセットとdictのキーセット。
組み合わせ両方のバリエーションは次のようになります。
:あなたのpython 3を使用する場合set(["foo","bar","baz"]) <= set(dct)
最後に、dict.keys()
は、あなたがこのようなパフォーマンスの低下なしでオペレーターを呼び出すことができることを意味しsetlikeオブジェクトを返します。
{"foo","bar","baz"} <= dct.keys()
これはきちんとした選択肢であり、TIMTOWTDIが避けられないIMHOを実証しています。残念ながら、2.6より小さい 'set'は' * args'を受けません - シーケンスを明示的に渡す必要があります(別の括弧のセット)。 –
これはO(1)ではなくO(n)になります。たとえ辞書が非常に大きければ、これがいかに恐ろしいかを知るために、あなたはオランダ語である必要はありません。 – geoffspear
setコンストラクタ呼び出しのエラーと、演算子に言及してくれてありがとう。私はO(n)がOPのケースで痛いとは思わない。なぜなら、彼は手動で各キーをチェックするからだ。:) –
便利なリンクが含まれています。 :) – davidchambers
...それは@ unutbuの以前の答えを繰り返すが。 –
@飛行羊:私が私の入力を開始したときに答えがなかった。私はunutbuを開始し、入力を終了したが、肯定的な例と否定的な例を作成し、いくつかのリンクされた参照を追加したと思います。 [すなわち私は彼の宿題をコピーしませんでした;-)] – Johnsyweb