needmoreeasy EN 한국어
배우기

57 — 묶기: 범주별 데이터

★★★★★ (5/5)데이터
선수 지식
36 — Word count, 54 — Stats
결과물
범주 키로 dict 목록을 목록들의 dict로 묶고, 범주별 개수를 보고하기

세기(가이드 36, 54)는 몇 개인지 답합니다. 묶기는 범주별로 몇 개인지 답합니다: dict 목록 하나를 키 값 하나당 하나의 목록들로 나눕니다.

단계

  1. dict 목록인 data.json을 만드세요 — 각 항목은 name, category, price를 가집니다:

    [
      {"name": "Mina", "category": "fruit", "price": 3},
      {"name": "Jun", "category": "veggie", "price": 2},
      {"name": "Sora", "category": "fruit", "price": 5},
      {"name": "Tom", "category": "veggie", "price": 1},
      {"name": "Ari", "category": "fruit", "price": 4}
    ]
    
    실행해 보기 →
  2. 가이드 14json_load로 불러옵니다. 손으로 묶는 법은 가이드 36if word in tally 생각입니다 — 새 범주는 빈 목록부터 시작합니다:

    use file latest
    items = json_load("data.json")
    groups = {}
    for item in items:
        cat = item["category"]
        if cat not in groups:
            groups[cat] = []
        groups[cat].append(item)
    
    실행해 보기 →
  3. setdefault는 "새 키는 빈 목록부터" 단계를 한 번에 합니다. 그다음 append는 언제나 동작합니다 — 같은 반복의 짧은 표기입니다:

    quick = {}
    for item in items:
        quick.setdefault(item["category"], []).append(item)
    
    실행해 보기 →
  4. 전체 프로그램은 묶고, 개수와 총 가격을 보고하며, setdefault가 같다고 보여 줍니다. group.ko.nme로 저장하세요:

    # group.ko.nme — 범주별로 묶고 개수를 보고하는 프로그램.
    # 실행: nme 실행 group.ko
    
    use file latest
    items = json_load("data.json")
    말해 "항목 " + str(len(items)) + "개를 불러왔습니다"
    
    groups = {}
    for item in items:
        cat = item["category"]
        if cat not in groups:
            groups[cat] = []
        groups[cat].append(item)
    
    말해 "범주별 개수:"
    for cat in groups:
        말해 cat + ": " + str(len(groups[cat])) + "개"
    
    말해 "범주별 총 가격:"
    for cat in groups:
        total = 0
        for item in groups[cat]:
            total = total + item["price"]
        말해 f"{cat}: ${total}"
    
    quick = {}
    for item in items:
        quick.setdefault(item["category"], []).append(item)
    
    말해 "setdefault로 만든 묶음:"
    for cat in quick:
        말해 f"{cat}: {len(quick[cat])}개"
    
    실행해 보기 →

    바깥 반복이 범주를, 안쪽 반복이 각 범주 목록의 항목들을 돌아봅니다.

  5. 같은 폴더에 data.json을 두고 실행하세요:

    nme 실행 group.ko
    
    항목 5개를 불러왔습니다
    범주별 개수:
    fruit: 3개
    veggie: 2개
    범주별 총 가격:
    fruit: $12
    veggie: $3
    setdefault로 만든 묶음:
    fruit: 3개
    veggie: 2개
    

    이제 각 범주가 목록이므로, 보고서가 그 개수를 세거나 이름을 나열하거나 가격을 더할 수 있습니다.

직접 해보기

category 대신 price로 묶어 보세요 — 가격마다 자기 묶음이 생겨 어떤 항목이 같은 가격인지 보여 줍니다.

배운 것

  • 묶기는 하나의 dict 목록을 키 값별 dict의 목록으로 나눕니다.
  • if cat not in groups가 새 목록을 시작하고 groups[cat].append(item)이 채웁니다.
  • groups.setdefault(cat, []).append(item)은 같은 일을 한 번에 합니다.
  • 바깥 반복이 범주를, 안쪽 반복이 각 범주의 항목들을 돌아봅니다.

GitHub에서 이 문서 보기