복붙노트

[PYTHON] items () 대신 iteritems ()를 사용해야하는시기는 언제입니까?

PYTHON

items () 대신 iteritems ()를 사용해야하는시기는 언제입니까?

모든 장소에서 iteritems () 대신 items ()를 사용하는 것이 합법적입니까? iteritems ()가 파이썬 3에서 삭제 된 이유는 무엇입니까? 대단하고 유용한 방법처럼 보입니다. 그 뒤에있는 논리는 무엇입니까?

편집 : 명확히하기 위해, 파이썬 2와 파이썬 3 모두와 호환되는 방식으로 생성기와 같은 방식으로 한 번에 하나의 항목을 메모리에 저장하는 대신 사전을 반복하는 올바른 숙어가 무엇인지 알고 싶습니다. ?

해결법

  1. ==============================

    1.Python 2.x에서 .items ()는 (key, value) 쌍의 목록을 반환했습니다. 파이썬 3.x에서는 .items ()가 itemview 객체가되어 동작이 다르기 때문에 반복 처리하거나 구체화해야합니다 ... 그래서 list (dict.items ())는 dict에 필요합니다. Python 2.x에서 items ().

    Python 2.x에서 .items ()는 (key, value) 쌍의 목록을 반환했습니다. 파이썬 3.x에서는 .items ()가 itemview 객체가되어 동작이 다르기 때문에 반복 처리하거나 구체화해야합니다 ... 그래서 list (dict.items ())는 dict에 필요합니다. Python 2.x에서 items ().

    Python 2.7에는 뷰 키, 뷰 아이템 및 뷰 값 메소드가있어서 키 처리를위한 약간의 백 포트가 있습니다. 가장 유용한 뷰킷은 집합과 비슷하게 동작합니다 (dict에서 기대하는 것).

    간단한 예 :

    common_keys = list(dict_a.viewkeys() & dict_b.viewkeys())
    

    공통 키 목록을 제공하지만 파이썬 3.x에서는 다시 .keys ()를 사용합니다.

    Python 3.x는 일반적으로 더 "게으른"것으로 만들어졌습니다. 즉, map은 이제 효과적으로 itertools.imap, zip은 itertools.izip 등입니다.

  2. ==============================

    2.dict.items는 이제 dict.iteritems가 python 2.x에서했던 일을 수행하고 itemview로 변경하여 조금 향상 시켜서 dict.iteritems가 제거되었습니다.

    dict.items는 이제 dict.iteritems가 python 2.x에서했던 일을 수행하고 itemview로 변경하여 조금 향상 시켜서 dict.iteritems가 제거되었습니다.

  3. ==============================

    3.6 개의 라이브러리는 파이썬 2.5+와 파이썬 3 모두와 호환되는 코드를 작성하는 데 유용합니다. 파이썬 2와 3에서 모두 작동하는 iteritems 메소드가 있습니다. 예 :

    6 개의 라이브러리는 파이썬 2.5+와 파이썬 3 모두와 호환되는 코드를 작성하는 데 유용합니다. 파이썬 2와 3에서 모두 작동하는 iteritems 메소드가 있습니다. 예 :

    from __future__ import division, absolute_import, print_function, unicode_literals
    import six
    
    d = dict( foo=1, bar=2 )
    
    for k, v in six.iteritems(d):
        print(k, v)
    
  4. ==============================

    4.파이썬 2와 파이썬 3에 대한 사전 문서에서 파이썬 2에서는 항목이리스트를 리턴하고 iteritems는 반복자를 리턴합니다.

    파이썬 2와 파이썬 3에 대한 사전 문서에서 파이썬 2에서는 항목이리스트를 리턴하고 iteritems는 반복자를 리턴합니다.

    파이썬 3에서 아이템은 뷰를 반환하는데, 이는 반복기와 거의 같습니다.

    파이썬 2를 사용하고 있다면 큰 사전을 다루는 사용자에게 iteritems를 원할 수 있습니다. 원하는 것을 반복하면 항목을 반복 할 수 있습니다 (반드시 목록으로 복사하지 않아도됩니다)

  5. ==============================

    5.파이썬의 모든 장소에서 iteritems 대신 아이템을 사용할 수는 없다. 예를 들어 다음 코드가 있습니다.

    파이썬의 모든 장소에서 iteritems 대신 아이템을 사용할 수는 없다. 예를 들어 다음 코드가 있습니다.

    class C:
      def __init__(self, a):
        self.a = a
      def __iter__(self):
        return self.a.iteritems()
    
    >>> c = C(dict(a=1, b=2, c=3))
    >>> [v for v in c]
    [('a', 1), ('c', 3), ('b', 2)]
    

    항목을 사용하면 휴식을 취할 수 있습니다.

    class D:
      def __init__(self, a):
        self.a = a
      def __iter__(self):
        return self.a.items()
    
    >>> d = D(dict(a=1, b=2, c=3))
    >>> [v for v in d]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __iter__ returned non-iterator of type 'list'
    

    viewitems도 Python 3에서 사용할 수 있습니다.

    또한 항목은 사전 (키, 값) 쌍의 사본을 반환하므로 사본을 만들지 않는 한 효율적이지 않습니다.

    Python 2에서는 반복을 위해 iteritem을 사용하는 것이 가장 좋습니다. 2to3 도구는 Python 3으로 업그레이드하기로 결정한 경우 항목으로 바꿀 수 있습니다.

  6. ==============================

    6.@Wessie가 지적한 것처럼, dict.iteritems, dict.iterkeys 및 dict.itervalues ​​(Python2.x의 반복자를 반환 함)뿐만 아니라 dict.viewitems, dict.viewkeys 및 dict.viewvalues ​​(Python2.x의 뷰 객체를 반환합니다. )는 모두 Python3.x에서 제거되었습니다.

    @Wessie가 지적한 것처럼, dict.iteritems, dict.iterkeys 및 dict.itervalues ​​(Python2.x의 반복자를 반환 함)뿐만 아니라 dict.viewitems, dict.viewkeys 및 dict.viewvalues ​​(Python2.x의 뷰 객체를 반환합니다. )는 모두 Python3.x에서 제거되었습니다.

    dict.items, dict.keys, dict.values는 Python2.x에서 사전 목록의 복사본을 반환하는 데 사용되었지만 이제는 Python3.x에서 뷰 객체를 반환하지만 여전히 iterator와 다릅니다.

    Python3.x에서 반복자를 반환하려면 iter (dictview)를 사용하십시오.

    $ python3.3
    
    >>> d = {'one':'1', 'two':'2'}
    >>> type(d.items())
    <class 'dict_items'>
    >>>
    >>> type(d.keys())
    <class 'dict_keys'>
    >>>
    >>>
    >>> ii = iter(d.items())
    >>> type(ii)
    <class 'dict_itemiterator'>
    >>>
    >>> ik = iter(d.keys())
    >>> type(ik)
    <class 'dict_keyiterator'>
    
  7. from https://stackoverflow.com/questions/13998492/when-should-iteritems-be-used-instead-of-items by cc-by-sa and MIT license