Python에서 사전을 반복할 때 .items()를 호출해야 하는 이유는 무엇입니까?
사전에서 키, 값 쌍을 반복해서 호출해야 하는 이유는 무엇입니까?즉
dic = {'one': '1', 'two': '2'}
for k, v in dic.items():
print(k, v)
왜 그것이 사전을 반복하는 기본적인 동작이 아닌가요?
for k, v in dic:
print(k, v)
모든 파이썬 컨테이너 C에 대해 기대되는 것은
for item in C:
assert item in C
잘 지나갈 거예요 -- 만약 한 가지 감각이 있다면 놀랄 거라고 생각하지 않나요?in
(루프 조항이) 다른 것과 전혀 다른 의미(존재확인)를 가진 것입니까?물론 그럴 겁니다!목록, 집합, 튜플, ...에 대해 자연스럽게 그런 방식으로 작동합니다.
그래서 언제.C
만약에, 사전입니다.in
키/값 튜플을 산출하는 것입니다.for
루프, 그러면 최소한의 놀라움의 원칙에 의해,in
또한 격납고 점검에서 좌측 피연산자와 같은 튜플을 가져가야 할 것입니다.
얼마나 유용하겠습니까?정말로 쓸모가 없어요, 기본적으로 만드는 것은if (key, value) in C
의 동의어.if C.get(key) == value
-- 제가 생각하기에 제가 한 일보다 100배나 더 드물게 공연을 했거나 하고 싶었을지도 모르는 체크입니다if k in C
실제로는 키의 존재만 확인하고 값을 완전히 무시하는 것을 의미합니다.
반면에 키로만 루프를 하는 것은 꽤 일반적입니다. 예를 들어:
for k in thedict:
thedict[k] += 1
그 가치 또한 특별히 도움이 되지 않을 것입니다.
for k, v in thedict.items():
thedict[k] = v + 1
좀 덜 명확하고 덜 간결합니다.(참고:items
키/값 쌍을 얻기 위해 사용하는 "적절한" 방법의 원래 철자였습니다. 불행하게도 이는 그러한 접근자들이 전체 목록을 반환하던 시절로 거슬러 올라가기 때문에 "정당한" 철자법을 지원하기 위해 대체 철자법이 도입되어야 했습니다.iteritems
이전 Python 버전과의 하위 호환성 제약이 많이 약화된 Python 3의 경우,items
다시).
내 추측으로는:전체 튜플을 사용하는 것이 루프를 하는 데는 더 직관적일 수 있지만, 구성원 자격에 대한 테스트에는 덜 직관적일 수 있습니다.in
.
if key in counts:
counts[key] += 1
else:
counts[key] = 1
키와 값을 둘 다 지정해야 한다면 그 코드는 실제로 작동하지 않을 것입니다.in
. 키와 값이 모두 사전에 있는지 확인하는 사용 사례를 상상하는 데 어려움을 겪고 있습니다.키만 테스트하는 것이 훨씬 더 자연스럽습니다.
# When would you ever write a condition like this?
if (key, value) in dict:
이제는 그들이 그들의in
연산자와for ... in
동일한 항목에 대해 작동합니다.구현 차원에서 서로 다른 운영 방식(__contains__
대__iter__
). 이 없을 하지만 약간의 불일치는 다소 혼란스럽고 일관성이 없을 것입니다.
언급URL : https://stackoverflow.com/questions/3744568/why-do-you-have-to-call-items-when-iterating-over-a-dictionary-in-python
'programing' 카테고리의 다른 글
n개 이상의 기준 중 n-1개 이상이 일치한 모든 레코드 (0) | 2023.09.17 |
---|---|
데이터베이스에 없는 경우 행 삽입 (0) | 2023.09.17 |
사용자 정보와 사용자 로그인 및 비밀번호를 가장 잘 저장하는 방법 (0) | 2023.09.17 |
스프링 : @모델속성 VS @RequestBody (0) | 2023.09.17 |
wp-admin 또는 wp-login.php에서 루프 재연결 (0) | 2023.09.17 |