100

私はそのような辞書を持っています:

grades = {
        'alex' : 11,
        'bob'  : 10,
        'john' : 14,
        'peter': 7
       }

と名前のリストstudents = ('alex', 'john')

のすべての名前がdictstudentsのキーとして存在することを確認する必要があります。grades

gradesより多くの名前を持つことができますが、のすべての名前studentsgrades

それを行うための簡単な方法があるはずですが、私はまだPythonに不慣れであり、それを理解することはできません。試しif students in gradesましたが、機能しませんでした。

実際の場合、リストははるかに大きくなります。

4

4 に答える 4

230

使用all()

if all(name in grades for name in students):
    # whatever
于 2012-06-12T10:52:50.510 に答える
28
>>> grades = {
        'alex' : 11,
        'bob'  : 10,
        'john' : 14,
        'peter': 7
}
>>> names = ('alex', 'john')
>>> set(names).issubset(grades)
True
>>> names = ('ben', 'tom')
>>> set(names).issubset(grades)
False

呼び出しclassは無効なので、に変更しましたnames

于 2012-06-12T10:52:53.440 に答える
5

学生をセットとして想定

if not (students - grades.keys()):
    print("All keys exist")

セットに変換しない場合

if not (set(students) - grades.keys()):
    print("All keys exist")
于 2018-11-15T15:45:52.517 に答える
0

<dict>.keys()を返すことを利用して、いくつかのキーがdictにあるかどうかをテストできますset

コード内のこのロジック...

if 'foo' in d and 'bar' in d and 'baz' in d:
    do_something()

より簡単に次のように表すことができます。

if {'foo', 'bar', 'baz'} <= d.keys():
    do_something()

セットの<=演算子は、左側のセットが右側のセットのサブセットであるかどうかをテストします。これを書く別の方法は<set>.issubset(other)です。

セットでサポートされている他の興味深い操作があります:https ://docs.python.org/3.8/library/stdtypes.html#set

このトリックを使用すると、上記の最初の例に示すように、コード内の多くの場所を凝縮して、いくつかのキーをチェックできます。

キーの全リストは、以下を使用してチェックすることもできます<=

if set(students) <= grades.keys():
    print("All studends listed have grades in your class.")

# or using unpacking - which is actually faster than using set()
if {*students} <= grades.keys():
    ...

または、それstudentsがdictでもある場合:

if students.keys() <= grades.keys():
    ...
于 2020-05-21T22:57:53.413 に答える