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
, viewitems
및 viewvalues
방법, 가장 유용한 viewkeys
더 많은처럼 동작 set
(당신이에서 기대할 수있는 dict
).
간단한 예 :
common_keys = list(dict_a.viewkeys() & dict_b.viewkeys())
일반적인 키 목록을 제공하지만 Python 3.x에서는 다시 사용하십시오 .keys()
. 대신 사용하십시오.
파이썬 3.x는 일반적으로 좀 더 "게으른"것으로 만들어졌습니다. 즉 , map
현재는 효과적 입니다 .itertools.imap
zip
itertools.izip
dict.iteritems
python 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 2 와 python 3 의 사전 문서에서 알 수 있듯이 python 2 items
에서는 목록을 iteritems
반환하고 반복자는 반환합니다.
파이썬 3에서는 반복자와 거의 동일한 view를items
반환 합니다.
python 2를 사용하는 iteritems
경우 큰 사전을 다루는 경우 사용자 에게 원할 수 있으며 원하는 것은 항목을 반복하는 것입니다 (목록에 반드시 복사 할 필요는 없음).
@Wessie가 주목 것처럼 dict.iteritems
, dict.iterkeys
및 dict.itervalues
(AN 반환하는 반복자 Python2.x하여)뿐만 아니라 dict.viewitems
, dict.viewkeys
및 dict.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
'Programing' 카테고리의 다른 글
onNewIntent () 라이프 사이클 및 등록 된 리스너 (0) | 2020.06.22 |
---|---|
데이터를 제출하지 않는 비활성화 된 양식 필드 (0) | 2020.06.22 |
iOS 10에서 Xcode 7 사용 (0) | 2020.06.22 |
백만 개의 문자열이 주어지면 반복되는 세 자리 숫자를 모두 반환하십시오. (0) | 2020.06.22 |
Java RegEx 메타 문자 (.) 및 일반 점? (0) | 2020.06.22 |