예를 들어 a = ['a', 'b', 'a']
의 목록이 있는데 어떤 문자를 b = {'a': [0, 2], 'b': [1]}
으로 변환 할 수 있습니까?목록에있는 항목의 색인과 동일한 모든 고유 항목 및 값과 동일한 키를 사용하여 목록을 dict로 변환합니다.
0
A
답변
3
당신은 list
기본 공장 defaultdict
를 사용할 수 있습니다 defaultdict
에게 주어진
>>> from collections import defaultdict
>>> a = ['a', 'b', 'a']
>>> res = defaultdict(list)
>>> for i, s in enumerate(a):
... res[s].append(i)
...
>>> res
defaultdict(<type 'list'>, {'a': [0, 2], 'b': [1]})
매개 변수가 존재하지 않습니다 키를 주어진 경우에 초기 값을 제공하기 위해 호출되는 함수입니다. 한 번 원래 목록이 반복되고 있으므로 list.append
의 시간 복잡도는 입니다. O (1) 총 시간 복잡도는 O (n)입니다. 다른 솔루션의
업데이트 성능 비교 :
from collections import defaultdict
def test1(l):
b = dict.fromkeys(set(l), [])
for i, val in enumerate(l):
b[val] = b.get(val)+[i]
def test2(l):
res = defaultdict(list)
for i, s in enumerate(l):
res[s].append(i)
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1(['a'] * 1000)", setup="from __main__ import test1", number=10))
print(timeit.timeit("test2(['a'] * 1000)", setup="from __main__ import test2", number=10))
출력 :
0.03234261799661908
0.000929353991523385
2
a = ['a', 'b', 'a']
b = dict.fromkeys(set(a), []) # {'a': [], 'b': []}
for i, val in enumerate(a):
b[val].append(i)
print (b)
을 제공합니다
{'a': [0, 2], 'b': [1]}
관련 문제
- 1. 고유 색인은 기본 색인과 동일한 이점을 제공합니다.
- 2. 목록에있는 모든 목록을 추가하여 동일한 길이의 목록을 만드는 방법
- 3. 동일한 목록에있는 모든 TextViews 및 ImageViews 추가
- 4. 결합 동일한 고유 ID 항목
- 5. 동일한 키를 사용하여 분리 된 항목 첨부하기
- 6. 목록에있는 동일한 값의 값
- 7. AppleScript를 사용하여 목록에있는 항목의 모든 가능성 목록을 만드는 방법은 무엇입니까?
- 8. column이 값과 동일한 키 목록을 가져 옵니까?
- 9. 모든 테이블에서 동일한 기본 키를 사용해도됩니까?
- 10. 모든 항목의 등급이 동일한 지 확인하십시오.
- 11. PBKDF2의 모든 구현은 동일한 입력에서 동일한 키를 생성해야합니까?
- 12. vim : 동일한 키를 사용하여 옵션 목록을 순환하는 방법?
- 13. 목록에있는 동일한 문자열 수를 얻으십시오.
- 14. belongs_to 및 has_many 동일한 항목
- 15. 동일한 데이터를 가진 MySQL 항목 + 항목의 최소 수를 선택하십시오.
- 16. ComboBox에 항목 추가 및 동일한 항목 선택
- 17. 모든 주문 항목의 일치 항목
- 18. 목록을 사용하여 고유 항목 찾기. Python
- 19. 목록에있는 항목의 빈도를 계산하십시오.
- 20. "동일한 키를 가진 항목"예외; 사전 열거 형 키가
- 21. 목록에있는 항목 수 MATLAB
- 22. java 목록에서 동일한 항목 제거
- 23. 동일한 키를 사용하여 javascript 객체에 값 저장
- 24. Python - 목록에있는 중복 항목의 인덱스
- 25. 목록을 dict로 변환하는 간단한 방법
- 26. 동일한 예외 항목의 로깅 줄이기
- 27. 모든 동일한 속성을 가진 ArrayList의 항목 결합하기
- 28. 클릭시이 값과 동일한 변수를 설정하십시오.
- 29. 동일한 하위 키를 사용하여 배열 병합/삭제
- 30. iPhone - 고유 항목 목록을 작성하는 방법
을 모든이를 반복에서이 새로운 목록을 생성하기 때문에 최악의 경우의 시간 복잡도는 ** O (n^2) **이므로 대부분의 인덱스에 동일한 값이 포함되어있는 경우 더 긴 목록을 사용하는 것이 가능하지 않습니다. – niemmi