다음과 같은 사전이 있습니다.
grades = {
'alex' : 11,
'bob' : 10,
'john' : 14,
'peter': 7
}
및 이름 목록 students = ('alex', 'john')
의 모든 이름 students
이 grades
dict의 키로 존재 하는지 확인해야합니다 .
grades
더 많은 이름을 가질 수 있지만의 모든 이름 students
은grades
그것을 할 수있는 간단한 방법이 있어야하지만 여전히 파이썬에 익숙하지 않아 알아낼 수 없습니다. 시도했지만 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():
...