首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过汇总Python中的现有列表来创建新列表

通过汇总Python中的现有列表来创建新列表
EN

Stack Overflow用户
提问于 2021-08-05 07:18:08
回答 4查看 64关注 0票数 2

我在Python中有一个类似这样的列表:

代码语言:javascript
复制
my_list = [
            {"id":1,"symbol":"ABC","quantity":100},
            {"id":2,"symbol":"PQR","quantity":500},
            {"id":3,"symbol":"ABC","quantity":300},
            {"id":1,"symbol":"XYZ","quantity":320},
            {"id":3,"symbol":"PQR","quantity":800},
         ]

我想总结一个具有相似符号的量,并创建一个新的列表。new_list将如下所示:

代码语言:javascript
复制
new_list = [
             { "symbol":"ABC","total_quantity":400,"ids":"1 3"}
             { "symbol":"PQR","total_quantity":1300,"ids":"2 3"}
             { "symbol":"XYZ","total_quantity":320,"ids":"1"}
           ]

我是Python的新手,尝试过一些方法,但都不能工作。我可以尝试实现什么呢?

EN

回答 4

Stack Overflow用户

发布于 2021-08-05 07:29:38

如果您可以使用pandas,您可以采用这种方法

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame.from_dict(my_list)
df1 = df.groupby('symbol').agg({'quantity':'sum',
                          'id':lambda x: ' '.join(map(str, x))}).reset_index()

输出:

代码语言:javascript
复制
{'0': {'symbol': 'ABC', 'quantity': 400, 'id': '1 3'},
 '1': {'symbol': 'PQR', 'quantity': 1300, 'id': '2 3'},
 '2': {'symbol': 'XYZ', 'quantity': 320, 'id': '1'}}
票数 1
EN

Stack Overflow用户

发布于 2021-08-05 07:30:04

一个很好的解决方案是使用一个便于按symbol分组的defaultdict,您只需要最后一步来构建ids

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

my_list = [{"id": 1, "symbol": "ABC", "quantity": 100},
           {"id": 2, "symbol": "PQR", "quantity": 500},
           {"id": 3, "symbol": "ABC", "quantity": 300},
           {"id": 1, "symbol": "XYZ", "quantity": 320},
           {"id": 3, "symbol": "PQR", "quantity": 800}, ]

expected = defaultdict(lambda: {'symbol': '', 'ids': [], "total_quantity": 0})
for row in my_list:
    expected[row['symbol']]['symbol'] = row['symbol']
    expected[row['symbol']]['ids'].append(str(row['id']))
    expected[row['symbol']]['total_quantity'] += row['quantity']

result = [{**x, 'ids': " ".join(x['ids'])} for x in expected.values()]
票数 1
EN

Stack Overflow用户

发布于 2021-08-05 07:36:26

这样的东西对你来说应该是有效的:

代码语言:javascript
复制
my_list = [
            {"id":1,"symbol":"ABC","quantity":100},
            {"id":2,"symbol":"PQR","quantity":500},
            {"id":3,"symbol":"ABC","quantity":300},
            {"id":1,"symbol":"XYZ","quantity":320},
            {"id":3,"symbol":"PQR","quantity":800},
         ]
new_list = []
for item in my_list:
    if item["symbol"] not in [new_item["symbol"] for new_item in new_list]:
        new_list.append({"symbol":item["symbol"],"total_quantity":item["quantity"],"ids":str(item["id"])})
    else:
        for new_item in new_list:
            if item["symbol"] == new_item["symbol"]:
                new_item["total_quantity"] += item["quantity"]
                new_item["ids"] += " "+str(item["id"])
                break
print(new_list)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68662193

复制
相关文章

相似问题

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