>  기사  >  백엔드 개발  >  Python의 items() 시리즈 함수 사용법에 대한 자세한 설명

Python의 items() 시리즈 함수 사용법에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-17 15:11:3714309검색

이 글에서는 Python의 Dictionary items() 시리즈 함수의 사용법을 주로 소개합니다. 매우 실용적인 기능입니다. 필요한 친구들이 참고할 수 있습니다. 예제가 포함된 Python의 사전 items() 함수 시리즈는 Python 프로그래밍에 대한 좋은 참조 값을 가지고 있습니다. 구체적인 분석은 다음과 같습니다.

먼저 예를 살펴보겠습니다.

import html  # available only in Python 3.x 
def make_elements(name, value, **attrs): 
  keyvals = [' %s="%s"' % item for item in attrs.items()] 
  attr_str = ''.join(keyvals) 
  element = &#39;<{name}{attrs}>{value}</{name}>&#39;.format( 
      name = name, 
      attrs = attr_str, 
      value = html.escape(value)) 
  return element 
make_elements(&#39;item&#39;, &#39;Albatross&#39;, size=&#39;large&#39;, quantity=6) 
make_elements(&#39;p&#39;, &#39;<spam>&#39;)

이 프로그램의 기능은 매우 간단합니다.

HTML 태그

를 생성하는 것입니다. html 모듈은 Python 3에서만 사용할 수 있습니다. .x만 존재합니다. 처음에는

속성

태그를 생성하는 keyval의 사전 유형 변수 가 흥미로운 방식으로 구성된다는 사실을 발견했습니다. 항목이 있어서 관련 정보를 확인해보니 많은 내용을 알게 되었는데, 여기에 정리해보겠습니다. 참고: 아래의 모든 Python 인터프리터에서 사용되는 버전의 경우 2.x는 2.7.3에 해당하고 3.x는 3.4.1에 해당합니다.

Python 2.x에서 공식 문서의 항목 방법은 다음과 같습니다. 다음과 같이 (키, 값) 쌍 목록을 생성합니다.

>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> d.items() 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]

을 검색하는 과정에서 우연히 stackoverflow에서 다음과 같은 질문을 보았습니다. dict.items()와 dict.iteritems()의 차이점은 무엇입니까? , 첫 번째 대답은 대략 다음과 같습니다. "처음에는 items()가 위와 같이 dict의 모든 요소를 ​​포함하는 목록을 반환했지만 이는 메모리를 너무 낭비하기 때문에 나중에 추가되었습니다( 참고: Python 2.2에서 나타나기 시작한 iteritems(), iterkeys() 및 itervalues() 함수 그룹은 메모리를 절약하기 위해 반복자를 반환하는 데 사용되지만 3.x에서는 items() 자체가 이러한 반복자를 반환합니다. 🎜> 3.x의 items() 동작은 2.x의 iteritems() 동작과 일치하며 iteritems() 함수는 폐지됩니다.”

그렇지만 이것이 더 흥미롭습니다. 답변이 승인되었지만 아래 의견에서는 3.x의 items() 동작이 2.x의 iteritems()와 다르다는 점을 지적했습니다. 실제로는 " 전체 시퀀스 프로토콜 객체를 반환합니다. ", 이

객체

는 dict의 변경 사항을 반영할 수 있습니다. 나중에 또 다른 함수 viewitems()가 Python 2.7에 추가되었고 이 동작은 3.x에서 일관성을 유지하기 위해 의견을 듣고, 테스트에 사용된 Python 버전에 주의하면서 다음 테스트를 수행했습니다. 테스트 1(Python 2.7.3):

Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> il 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)] 
>>> it 
<dictionary-itemiterator object at 0x7fe555159f18> 
>>> vi 
dict_items([(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)])

테스트 2(Python 3.4.1):

Python 3.4.1 (default, Aug 12 2014, 16:43:01)  
[GCC 4.9.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;iteritems&#39; 
>>> vi = d.viewitems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;viewitems&#39; 
>>> il 
dict_items([(&#39;size&#39;, &#39;large&#39;), (&#39;quantity&#39;, 6)])

Python 3.x에서는 iteritems()와 viewitems() 두 가지 메서드가 폐지되었으며 item()의 결과가 2.x의 viewitems()와 일치하는 것을 볼 수 있습니다.

2.x에서 iteritems() 및 viewitems()에 의해 반환된 콘텐츠는 아래와 같이 for를 사용하여 탐색할 수 있습니다.

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large

둘 사이의 차이점은 무엇인가요? viewitems()는 사전의 변경 사항을 반영할 수 있는 뷰 객체를 반환합니다. 예를 들어 위의 예에서 it과 vi라는 두 변수를 사용하기 전에 d에 키-값 조합을 추가하면 차이를 쉽게 확인할 수 있습니다. .

>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> d[&#39;newkey&#39;] = &#39;newvalue&#39; 
>>> d 
{&#39;newkey&#39;: &#39;newvalue&#39;, &#39;quantity&#39;: 6, &#39;size&#39;: &#39;large&#39;} 
>>> vi 
dict_items([(&#39;newkey&#39;, &#39;newvalue&#39;), (&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]) 
>>> it 
<dictionary-itemiterator object at 0x7f50ab898f70> 
>>> for k, v in vi: 
...  print k, v 
...  
newkey newvalue 
quantity 6 
size large 
>>> for k, v in it: 
...  print k, v 
...  
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
RuntimeError: dictionary changed size during iteration

세 번째 줄에서는 d에 새 요소를 삽입했는데, vi는 계속 순회할 수 있고 새 순회는 d의 변경 사항을 반영할 수 있지만 순회할 때 사전에 오류 메시지가 나타납니다. 순회 중에 변경되어 순회가 실패했습니다.

정리하자면, 2.x에서는 원래 items() 메소드를 사용했지만, 메모리 낭비가 너무 심해서 iterator를 반환하는 iteritems() 메소드가 추가되었습니다. items() 메소드가 추가되었습니다. ()의 동작이 뷰 객체를 반환하도록 수정되었으므로, 반환된 객체는 원래 사전의 변경 사항도 반영할 수 있습니다. 동시에 viewitems()의 이전 버전과의 호환성 기능도 추가되었습니다. 2.7에서.

그래서 3.x에서는 items() 메소드가 하나만 유지되므로 세 가지의 차이점에 대해 걱정할 필요가 없습니다.

이 기사에 설명된 예제는 모든 사람의 Python 프로그래밍에 대한 특정 참조 가치가 있다고 믿습니다.


【관련 추천사항】

1.

특별 추천

: "php Programmer Toolbox" V0.1 버전 다운로드2. 무료 Python 동영상 튜토리얼

3. Python 기본 소개를 위한 Items() 메서드

4. 파이썬 순회 사전의 item() 함수 예시

5. 사전에 접근하는 세 가지 방법 소개

6. 항목 항목과 정렬 항목의 차이점

위 내용은 Python의 items() 시리즈 함수 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.