首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'itertools._grouper‘对象没有属性'user’

'itertools._grouper‘对象没有属性'user’
EN

Stack Overflow用户
提问于 2019-05-21 04:29:28
回答 1查看 771关注 0票数 0

为什么我不能将groupby中的循环groupby转换为list?目前,我正在使用Django==2.2.1,当我将下面的data = [...]尝试到python中时,它运行得很好。

代码语言:javascript
复制
from itertools import groupby
from operator import itemgetter


@login_required
def list(request, template_name='cart/list.html'):
    # I also try with this dummy data
    test_data = [{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':7.0}]

    print(type(data)) # a list

    sorted_totals = sorted(test_data, key=itemgetter('total_order'))
    for agent_name, group in groupby(sorted_totals, key=lambda x: x['agent_name']):
        print(agent_name, list(group)) # I stopped here when converting the `group` as list.

但是,当我在Django中的视图中尝试这个错误时,会遇到这样的错误。

我也用defaultdict试过

代码语言:javascript
复制
from collections import defaultdict


@login_required
def list(request, template_name='cart/list.html'):

    test_data = [{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':7.0}]

    grouped = defaultdict(list)
    for data_total in test_data:
        grouped[data_total['agent_name']].append(data_total) # stoped here

    grouped_out = []
    for agent_name, group in grouped.items():
        total_order = 0
        total_pcs = 0
        total_kg = 0

        if isinstance(group, list):
            for data_total in group:
                total_order += data_total.get('total_order')
                total_pcs += data_total.get('total_pcs')
                total_kg += data_total.get('total_kg')

            grouped_out.append({
                'agent_name': agent_name,
                'total_order': total_order,
                'total_pcs': total_pcs,
                'total_kg': total_kg
            })

但是我发现的错误被包装器视图阻止了。如果我们按照前面的问题,它引用了这个_wrapped_view

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 01:53:37

最后,我使用dict手动修复了它。

代码语言:javascript
复制
test_data = [{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':5.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agentbeli','total_pcs':1,'total_kg':6.0},{'total_order':1,'agent_name':'agent123','total_pcs':1,'total_kg':7.0}]


grouped = {}
for data_total in test_data:
    agent_name = data_total.get('agent_name')
    if agent_name in grouped:
        new_data = grouped[agent_name]  # dict
        new_data['total_order'] += data_total.get('total_order')
        new_data['total_pcs'] += data_total.get('total_pcs')
        new_data['total_kg'] += data_total.get('total_kg')

        grouped[agent_name].update(**new_data)
    else:
        grouped[agent_name] = data_total

grouped的结果如下所示:

代码语言:javascript
复制
{'agent123': {'agent_name': 'agent123',
  'total_kg': 18.0,
  'total_order': 3,
  'total_pcs': 3},
 'agentbeli': {'agent_name': 'agentbeli',
  'total_kg': 17.0,
  'total_order': 3,
  'total_pcs': 3}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56231089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档