Programing

items () 대신 iteritems ()를 언제 사용해야합니까?

lottogame 2020. 6. 22. 07:50
반응형

items () 대신 iteritems ()를 언제 사용해야합니까?


모든 장소에서 사용 items()하는 것이 합법적 iteritems()인가요? iteritems()파이썬 3에서 제거 되었습니까? 훌륭하고 유용한 방법 인 것 같습니다. 그 뒤에 추론은 무엇입니까?

편집 : 명확히하기 위해 Python 2 및 Python 3과 호환되는 방식으로 사전과 같은 생성기 같은 방식으로 (한 번에 하나의 항목이 아닌 메모리로) 반복하는 올바른 관용구가 무엇인지 알고 싶습니다. ?


Python 2.x에서- .items()(키, 값) 쌍의 목록을 반환했습니다. 파이썬 3.x의에서 .items()지금 itemview다른 동작 객체는 - 그렇게 가지고 ... 그래서를 통해 반복, 또는 구체화 할, list(dict.items())무슨 필요 dict.items()파이썬 2.x 또는 3.0에

파이썬 2.7은 또한 당신이이 점에서, 키 처리를위한 백 포트의 비트를 가지고 viewkeys, viewitemsviewvalues방법, 가장 유용한 viewkeys더 많은처럼 동작 set(당신이에서 기대할 수있는 dict).

간단한 예 :

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

일반적인 키 목록을 제공하지만 Python 3.x에서는 다시 사용하십시오 .keys(). 대신 사용하십시오.

파이썬 3.x는 일반적으로 좀 더 "게으른"것으로 만들어졌습니다. 즉 , map현재는 효과적 입니다 .itertools.imapzipitertools.izip


dict.iteritemspython 2.x에서 dict.items한 일을 하기 때문에 제거 dict.iteritems되었으며 심지어 itemview.


6 개의 라이브러리 는 python 2.5 이상 및 python 3과 호환되는 코드 작성에 도움이됩니다. iteritems 메서드는 python 2 및 3에서 모두 작동합니다.

import six

d = dict( foo=1, bar=2 )

for k, v in six.iteritems(d):
    print(k, v)

python 2python 3 의 사전 문서에서 알 수 있듯이 python 2 items에서는 목록을 iteritems반환하고 반복자는 반환합니다.

파이썬 3에서는 반복자와 거의 동일한 view를items 반환 합니다.

python 2를 사용하는 iteritems경우 큰 사전을 다루는 경우 사용자 에게 원할 수 있으며 원하는 것은 항목을 반복하는 것입니다 (목록에 반드시 복사 할 필요는 없음).


@Wessie가 주목 것처럼 dict.iteritems, dict.iterkeysdict.itervalues(AN 반환하는 반복자 Python2.x하여)뿐만 아니라 dict.viewitems, dict.viewkeysdict.viewvalues(리턴되는 보기 개체 Python2.x에서) 모든 Python3.x하에 제거

그리고 dict.items, dict.keys그리고 dict.values반환하는 데 사용 사본 지금 Python2.x에서 사전의 목록을 반환 뷰 객체를 Python3.x에, 하지만 그들은 여전히 동일하지 않습니다 반복자 .

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

파이썬의 모든 곳에서 items대신 사용할 수는 없습니다 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)]

다음을 사용하면 중단됩니다 items.

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'

The same is true for viewitems, which is available in Python 3.

Also, since items returns a copy of the dictionary’s list of (key, value) pairs, it is less efficient, unless you want to create a copy anyway.

In Python 2, it is best to use iteritems for iteration. The 2to3 tool can replace it with items if you ever decide to upgrade to Python 3.

참고URL : https://stackoverflow.com/questions/13998492/when-should-iteritems-be-used-instead-of-items

반응형