по умолчанию в группировке - PullRequest
0 голосов
/ 07 мая 2019

Мой код не дает мне таких же результатов, как моя функция assert не работает.В чем может быть проблема?

Я попытался сместить функцию 'return d' на одну вкладку вправо, чтобы сократить возможности кода, и после печати 'groups1' и 'test_max_item' вывод будет похожим.Однако функция assert все еще не работает.


Scripts =[ { ‘a’: ‘1, ‘bnf_name’: ‘joy’, ‘items’ : 3}
{ ‘a’ :2, ‘ bnf_name’: ‘loss’, ‘ items’: 6}....]
from collections import defaultdict

def group_by_field(dictionary, grpbykey): 
    d = defaultdict(list)
    for poop in dictionary: 
        d[poop[grpbykey]].append(poop)
    return d

groups1 = group_by_field(scripts, 'bnf_name')
test_max_item = group_by_field(scripts,'bnf_name')
assert test_max_item == groups1

Я не ожидал ошибок подтверждения.

1 Ответ

0 голосов
/ 08 мая 2019

Вашему коду не хватает читабельности (х100). Во всяком случае, может быть, это то, что вы ищете:

from collections import defaultdict


scripts = [{'a': 1, 'bnf_name': 'joy', 'items': 3}, {'a': 2, ' bnf_name': 'loss', ' items': 6}]
reverse_scripts = [{val:key for val,key in d.iteritems()} for d in scripts]


def group_by_field(dictionaries, grpbykey):
    d = defaultdict(list)
    for dictionary in dictionaries:
        if grpbykey in dictionary:
            d[grpbykey].append(dictionary[grpbykey])
    return d


groups1 = group_by_field(reverse_scripts, 'bnf_name')
test_max_item = group_by_field(reverse_scripts, 'bnf_name')
assert test_max_item == groups1
...