그룹화된 결과 내에서 첫 번째 요소를 목록으로 유지하면서 Python에서 각 쌍의 두 번째 요소로 쌍 목록을 효율적으로 그룹화하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-31 04:11:01
원래의
254명이 탐색했습니다.

How can I efficiently group a list of pairs in Python by the second element of each pair, while retaining the first element as a list within the grouped result?

Python Group By

첫 번째 요소를 목록으로 유지하면서 각 쌍의 두 번째 요소로 데이터 쌍 집합을 그룹화해야 할 수도 있습니다. 그룹화된 결과입니다. 이는 다음 단계를 사용하여 Python에서 효율적으로 달성할 수 있습니다.

사전 사용

컬렉션 모듈의 defaultdict를 사용하여 사전을 생성합니다. 여기서 키는 쌍의 두 번째 요소입니다. 그런 다음 입력 목록을 반복하고 해당 키 값에 첫 번째 요소를 추가합니다.

<code class="python">import collections

input = [
    ('11013331', 'KAT'),
    ('9085267', 'NOT'),
    ('5238761', 'ETH'),
    ('5349618', 'ETH'),
    ('11788544', 'NOT'),
    ('962142', 'ETH'),
    ('7795297', 'ETH'),
    ('7341464', 'ETH'),
    ('9843236', 'KAT'),
    ('5594916', 'ETH'),
    ('1550003', 'ETH'),
]

res = collections.defaultdict(list)
for v, k in input:
    res[k].append(v)</code>
로그인 후 복사

목록 이해를 사용하여 사전을 예상 JSON 형식으로 변환합니다.

<code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>
로그인 후 복사

사용 itertools.groupby

또 다른 접근 방식은 itertools.groupby를 사용하는 것이지만 입력 목록을 두 번째 요소별로 정렬해야 합니다.

<code class="python">from operator import itemgetter
from itertools import groupby

sorted_input = sorted(input, key=itemgetter(1))
groups = groupby(sorted_input, key=itemgetter(1))</code>
로그인 후 복사

컴프리헨션을 사용하여 사전 목록을 만듭니다.

<code class="python">result = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
로그인 후 복사

Python 버전 고려 사항

Python 3.7 이전에는 사전의 키 순서가 유지되지 않았습니다. 원래 순서를 유지하려면 collections.OrderedDict를 사용하세요.

<code class="python">from collections import OrderedDict

res = OrderedDict()
for v, k in input:
    if k in res:
        res[k].append(v)
    else:
        res[k] = [v]</code>
로그인 후 복사

Python 3.7부터 일반 사전이 삽입 순서를 유지하므로 OrderedDict는 더 이상 필요하지 않습니다.

위 내용은 그룹화된 결과 내에서 첫 번째 요소를 목록으로 유지하면서 Python에서 각 쌍의 두 번째 요소로 쌍 목록을 효율적으로 그룹화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!