Python Forum
How to unpack tuples in if statements
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to unpack tuples in if statements
#1
I am trying to write a function that accepts a list of dictionary (data) and a tuple (fields). Function groups the data based on elements in fields tuple. Since I do not know how many elements will be there in the tuple, how could I re-write this function so that it works for any number of items in the fields tuple.

def group_by_field(data, fields):
    groups = {}
    
    for item in data:
        if (item[fields[0]],item[fields[1]]) in groups:
            groups[item[fields[0]],item[fields[1]]].append(item)
        else:
            groups[item[fields[0]],item[fields[1]]] = []
            groups[item[fields[0]],item[fields[1]]].append(item)
    
    return groups
Reply
#2
I suggest two versions
from collections import defaultdict

def group_by_fields2(data, fields):
    groups = defaultdict(list)
    for item in data:
        key = tuple(item[f] for f in fields)
        groups[key].append(item)
    return groups
and this one, which may not preserve the initial ordering of the dictionaries
from itertools import groupby

def group_by_fields3(data, fields):
    def key(item): return tuple(item[f] for f in fields)
    return {k: list(g) for k, g in groupby(sorted(data, key=key),key=key)}
The first version can be refactored a little by providing a more general function
from collections import defaultdict

def group_by(data, key):
    groups = defaultdict(list):
    for item in data:
        groups[key(item)].append(item)
    return dict(groups)

def group_by_fields4(data, fields):
    return group_by(data, lambda item: tuple(item[f] for f in fields))
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Too much values to unpack actualpy 3 408 Feb-11-2024, 05:38 PM
Last Post: deanhystad
  unpack dict menator01 1 1,158 Apr-09-2022, 03:10 PM
Last Post: menator01
  ValueError: not enough values to unpack (expected 4, got 1) vlearner 2 6,277 Jan-28-2022, 06:36 PM
Last Post: deanhystad
  [SOLVED] [geopy] "ValueError: too many values to unpack (expected 2)" Winfried 2 2,835 Mar-30-2021, 07:01 PM
Last Post: Winfried
  Cannot unpack non-iterable NoneType object, i would like to ask for help on this. Jadiac 3 8,816 Oct-18-2020, 02:11 PM
Last Post: Jadiac
  subprogram issues: cannot unpack non-iterable function object error djwilson0495 13 5,865 Aug-20-2020, 05:53 PM
Last Post: deanhystad
  struct.unpack failed Roro 2 3,278 Jun-13-2020, 05:28 PM
Last Post: DreamingInsanity
  Can't unpack values of dictionary with ** Snake 3 3,501 Mar-11-2020, 11:17 AM
Last Post: Snake
  Error: too many values to unpack Mike 1 5,095 Oct-30-2019, 03:07 PM
Last Post: buran
  too many values to unpack error fyec 1 8,026 Jun-28-2018, 01:48 AM
Last Post: ichabod801

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020