我做了一个循环,以以下格式提供数据:

name_quant = [{'name_id': 'S00004', 'quantity': '1'}, {'name_id': 'S00004', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '1'}, 
 {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00002', 'quantity': '1'}]

我使用以下循环获得上述值:

namesequence = EventSequence.objects.filter(description="names").values("Details")

name_quant = [{ 'name_id': e['element'][33:39], 
                        'quantity': e['element'][50:51] } for e in namesequence ]

所以我的问题是,我如何聚合name_id并将匹配name_id的数量相加,从而得到如下结果:

 name_sum = [{'name_id': 'S00001', 'quantity': '160'}, {'name_id': 'S00002', 'quantity': '50'}, {'name_id': 'S00003', 'quantity': '40'}, {'name_id': 'S00004', 'quantity': '90'}]

我会在Django中使用sum函数,但我必须先对值下标并循环,这使得它有点复杂.

推荐答案

如果我正确理解了这个问题,那么看起来需要按数量合并密钥(name_id).我看不出所需的输出值是如何从样本输入数据中导出的,但这可能是因为它不完整.

name_quant = [{'name_id': 'S00004', 'quantity': '1'}, {'name_id': 'S00004', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '1'}, 
 {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00003', 'quantity': '2'}, {'name_id': 'S00002', 'quantity': '1'}]

td = dict()

for e in name_quant:
    nid = e['name_id']
    td[nid] = td.get(nid, 0) + int(e['quantity'])

new_list = [{'name_id': k, 'quantity': str(v)} for k, v in td.items()]

print(new_list)

Output:

[{'name_id': 'S00004', 'quantity': '3'}, {'name_id': 'S00003', 'quantity': '5'}, {'name_id': 'S00002', 'quantity': '1'}]

Python相关问答推荐

如何在箱形图中添加绘制线的传奇?

删除所有列值,但判断是否存在任何二元组

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

使用groupby Pandas的一些操作

当独立的网络调用不应该互相阻塞时,'

Pandas DataFrame中行之间的差异

给定高度约束的旋转角解析求解

为一个组的每个子组绘制,

删除marplotlib条形图上的底边

用SymPy在Python中求解指数函数

如何按row_id/row_number过滤数据帧

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

使用Python异步地持久跟踪用户输入

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

你能把函数的返回类型用作其他地方的类型吗?'

删除Dataframe中的第一个空白行并重新索引列

Django抛出重复的键值违反唯一约束错误

Django查询集-排除True值

Django-修改后的管理表单返回对象而不是文本