> 백엔드 개발 > 파이썬 튜토리얼 > Python이 itertools.groupby()를 사용하여 필드에 따라 레코드를 그룹화하는 방법

Python이 itertools.groupby()를 사용하여 필드에 따라 레코드를 그룹화하는 방법

不言
풀어 주다: 2018-10-22 17:21:57
앞으로
2700명이 탐색했습니다.
이 기사의 내용은 Python이 itertools.groupby()를 사용하여 필드에 따라 레코드를 그룹화하는 방법에 대한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

1. 요구 사항

일련의 사전이나 개체 인스턴스가 있으며 특정 필드에 따라 데이터를 그룹화하고 반복하려고 합니다.

2. 솔루션

itertools.groupby() 함수는 데이터를 그룹화할 때 특히 유용합니다.

예:

from operator import itemgetter
from itertools import groupby

rows=[
    {'name':'mark','age':18,'uid':'110'},
    {'name':'miaomiao','age':28,'uid':'160'},
    {'name':'miaomiao2','age':28,'uid':'150'},
    {'name':'xiaohei','age':38,'uid':'130'},
]

#首先根据age排序
rows.sort(key=itemgetter('age'))

for age,items in groupby(rows,key=itemgetter('age')):
    print(age)
    for i in items:
        print(i)
로그인 후 복사

결과:

18
{'name': 'mark', 'age': 18, 'uid': '110'}
28
{'name': 'miaomiao', 'age': 28, 'uid': '160'}
{'name': 'miaomiao2', 'age': 28, 'uid': '150'}
38
{'name': 'xiaohei', 'age': 38, 'uid': '130'}
로그인 후 복사

3.

Python의 단일 키 다중 값 사전 구현 방법 분석

함수 groupby()는 시퀀스를 스캔하여(또는 매개변수 키는 지정된 함수에서 반환된 값)을 그룹화합니다. groupby()는 반복자를 생성하고 각 반복은 값과 sub_iterator를 반환합니다. 이 반복자는 그룹에서 해당 값을 가진 모든 항목을 생성할 수 있습니다.

여기서 중요한 것은 먼저 연령을 기준으로 데이터를 정렬하는 것입니다. groupby()는 정렬되지 않기 때문입니다.

무작위 액세스를 허용하기 위해 단순히 날짜를 기준으로 데이터를 대규모 데이터 구조로 그룹화하는 경우 defaultdict()를 사용하여 단일 키 다중 값 사전을 구축하는 것이 더 나을 수 있습니다.

from collections import defaultdict

rows=[
    {'name':'mark','age':18,'uid':'110'},
    {'name':'miaomiao','age':28,'uid':'160'},
    {'name':'miaomiao2','age':28,'uid':'150'},
    {'name':'xiaohei','age':38,'uid':'130'},
]

rows_by_age=defaultdict(list)
for row in rows:
    rows_by_age[row['age']].append(row)
for a in rows_by_age[28]:
    print(a)
로그인 후 복사

결과:

{'name': 'miaomiao', 'age': 28, 'uid': '160'}
{'name': 'miaomiao2', 'age': 28, 'uid': '150'}
로그인 후 복사

정렬을 고려하지 않는 경우 일반적으로 defaultdict 방법이 groupby보다 빠릅니다.

위 내용은 Python이 itertools.groupby()를 사용하여 필드에 따라 레코드를 그룹화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿