[python] Python은 키 목록이 사전에 있는지 확인합니다.

다음과 같은 사전이 있습니다.

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

및 이름 목록 students = ('alex', 'john')

의 모든 이름 studentsgradesdict의 키로 존재 하는지 확인해야합니다 .

grades더 많은 이름을 가질 수 있지만의 모든 이름 studentsgrades

그것을 할 수있는 간단한 방법이 있어야하지만 여전히 파이썬에 익숙하지 않아 알아낼 수 없습니다. 시도했지만 if students in grades작동하지 않았습니다.

실제 경우에는 목록이 훨씬 더 커질 것입니다.



답변

사용 all():

if all(name in grades for name in students):
    # whatever


답변

>>> 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.


답변

학생들을 세트로 가정

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

설정으로 변환하지 않으면

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


답변

딕셔너리에 여러 키가 있는지 테스트 할 수 있습니다 <dict>.keys().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():
    ...


답변