재미 나는 다른 방법을 함께했다.
>>> from collections import OrderedDict as OD
>>> attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')))
당신이
>>> reverse = OD(attributes.items()[::-1])
또는 더 파이썬 접근 할 수 되돌리고 싶은 경우 :
>>> reverse = OD(reversed(attributes.items()))
참고는 list
항목을 만들 필요가 없습니다 이미 목록입니다 reversed
이 생성자 인 동안 OrderedDict
은 단순히 반복하여 새로운 dict을 생성합니다.
모두 유사한 타이밍 발생.
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')))" "reverse = OD(attributes.items()[::-1])"
10000 loops, best of 3: 54.8 usec per loop
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')))" "reverse = OD(reversed(attributes.items()))"
10000 loops, best of 3: 54.4 usec per loop
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')))" "reversed_attributes=OD(reversed(list(attributes.items())))"
10000 loops, best of 3: 54.4 usec per loop
당신이 반전 할 경우 :
>>> invert = OD(zip(*zip(*attributes.items())[::-1]))
이상 파이썬 :
>>> invert = OD(map(reversed, attributes.items()))
을 다시 모두 생성 비슷한 타이밍을.
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')));" "invert = OD(zip(*zip(*attributes.items())[::-1]))"
10000 loops, best of 3: 57 usec per loop
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')));" "invert = OD(map(reversed, attributes.items()))"
10000 loops, best of 3: 56.8 usec per loop
$ python -m timeit "from collections import OrderedDict as OD; attributes = OD((('brand','asus'), ('os','linux'), ('processor','i5'), ('memory','4G')));" "inverted_attributes=OD([reversed(item) for item in attributes.items()])"
10000 loops, best of 3: 55.8 usec per loop
두 가지 방법을 역 및 반전 함께 사용할 수 있습니다.
이 작동하지만, 비효율적이다? reverse (list (a.items()))를 사용하면 오버 헤드가 많이 발생하므로 파이썬이 아닌가? inverted_attributes와 동일합니다.
뭔가 많은 오버 헤드를 생성하고 매우 파이썬 할 수 있습니다 매우 매우 효율적이 아닌 다른 한편 무엇인가에 파이썬 수, 기간은 약간 학대,하지만 그게 바로 내 의견
발휘에서 할 수 있습니다 위키 백과 :
파이썬 커뮤니티의 일반적인 신조어는 pythonic이며 프로그램 스타일과 관련된 다양한 의미를 가질 수 있습니다. 코드가 파이썬이라고 말하는 것은 파이썬 이디엄을 잘 사용한다는 것입니다. 즉 자연 스럽거나 언어에 유창함을 보여줍니다. 마찬가지로 Python이라는 인터페이스 또는 언어 기능에 대해 Python 관용구와 잘 어울리 며 사용법이 나머지 언어와도 잘 맞는다는 의견을 말합니다. 반면
는 unpythonic 코드의 표시는 C++를 작성하는 시도하는 (또는 리스프, 펄, 또는 Java)에서 코드를 파이썬 즉, 거친 전사가 아닌 다른 언어의 형태의 관용적 번역을 제공합니다.Pythonicity의 개념은 Python의 최소한의 가독성 철학에 밀접하게 연결되어 있으며 "한 가지 이상의 방법이 있습니다"접근법을 피합니다. 읽을 수없는 코드 또는 이해할 수없는 관용구는별로 만족스럽지 않습니다.
하지만 우리는이 감소 성능을 확장 할 수 같이 경우와
?
왜 이런 변형이 일어나는지, 시스템의 필수적인 부분인지 여부를 모르는 채로 근본적으로 최소한의 시간에 선형 시간/공간 오버 헤드가 추가 될 수도 있고 그렇지 않을 수도 있습니다 항목 수가 적다면 문제는 없지만 모든 요청에 대해 웹 서버에서 이러한 상황이 발생한다고 가정하면 큰 dicts에서이 작업을 수행 할 수 있습니다.이 작업은 매우 까다로울 수 있으므로 피하기 위해 다시 디자인해야 할 수 있습니다 이.
'반전 (목록 (a.items을())) 당신이 불필요을 반복 다음,'list'를 생성하고 있기 때문에'많은 오버 헤드를 생성 반대로. 'list' 생성자를 제거하면'items'를 역순으로 반복 할 것입니다 (중간 복사는 없습니다). 비슷하게, 새로운'OrderedDict'를 초기화 할 때, 무언가 중간의'list's를 피하기 위해,리스트 이해력이 아닌 생성자 표현식 (주위에'[]')을 사용하고 싶습니다. – ShadowRanger