Python 3: группировка списка dict по кортежу полей - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно сгруппировать список dict по кортежу полей и написать функцию, которая сделает это для разных наборов данных.

Например: список dict:

[{'bnf_code': '0101010G0AAABAB',
 'items': 2,
  'practice': 'N81013',
  'bnf_name': 'Co-Magaldrox_Susp 195mg/220mg/5ml S/F',
  'nic': 5.98,
  'act_cost': 5.56,
  'quantity': 1000},
 {'bnf_code': '0101021B0AAAHAH',
  'items': 1,
  'practice': 'N81013',
  'bnf_name': 'Alginate_Raft-Forming Oral Susp S/F',
  'nic': 1.95,
  'act_cost': 1.82,
  'quantity': 500}]

и я хочу сгруппировать кортеж -> ('bnf_name', 'post_code')).

Я не могу использовать pandas.

Я пробовал с приведенным ниже кодом, но он вызывает KeyError .

def group_by_field(data,fields):
    groups = {name: [] for name in fields}
    for script in data:
        for name in fields:
            groups[script[name]].append(script)
    return groups

1 Ответ

0 голосов
/ 05 февраля 2020

Вот функция, которая делает то, что вы описываете:

from collections import defaultdict
def group_by_field(data, fields):
    res = defaultdict(list)
    for d in data:
        key = tuple(d[f] for f in fields)
        res[key].append(d)
    return dict(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...