首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括其他信息时发生的事件的计数

包括其他信息时发生的事件的计数
EN

Stack Overflow用户
提问于 2020-11-17 20:18:27
回答 2查看 58关注 0票数 0

在Python中,我有一个字典列表。我希望计数每个名称的出现情况,但也希望将其他数据与其合并。

这是输入

代码语言:javascript
复制
task_list = [
    {
        "name": "user1",
        "email": "user1@gmail.com",
        "task": "12121"
    },
    {
        "name": "user2",
        "email": "user2@gmail.com",
        "task": "13131"
    },
    {
        "name": "user1",
        "email": "user1@gmail.com",
        "task": "14141"
    }
]

预期产出

代码语言:javascript
复制
[
    {
        "name": "user1",
        "email": "user1@gmail.com",
        "task": ["12121", "14141"],
        "count": 2
    },
    {
        "name": "user2",
        "email": "user2@gmail.com",
        "task": ["13131"],
        "count": 1
    }
]

目前,我只获得每个用户的计数,但我不知道如何将其他信息与计数合并。

这是我的密码

代码语言:javascript
复制
counts = {}
for task in task_list:
    if task["name"] not in counts.keys():
        counts[task["name"]] = 1
    else:
        counts[task["name"]] +=1

这是我目前正在做的输出

代码语言:javascript
复制
[
    {
        "name": "user1",
        "count": 2
    },
    {
        "name": "user2",
        "count": 1
    }
]

我所能想到的就是循环5-6次并生成预期的输出。但我认为这是个糟糕的解决方案。是否有任何软件包或其他解决方案来完成这一任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-17 20:34:36

熊猫可以做这件事

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame(task_list)

# Groupby similar keys and get len of task
df.groupby(['name', 'email']).agg({'task': list}).assign(count=lambda x: x['task'].map(lambda x: len(x))).reset_index().to_dict(orient='records')
代码语言:javascript
复制
[{'name': 'user1', 'email': 'user1@gmail.com', 'task': ['12121', '14141'], 'count': 2}, {'name': 'user2', 'email': 'user2@gmail.com', 'task': ['13131'], 'count': 1}]
票数 0
EN

Stack Overflow用户

发布于 2020-11-17 21:01:44

这段代码是为我做的:

代码语言:javascript
复制
i = 0
for d1 in task_list:
    i += 1
    for d2 in task_list[i:]:
        if d1["name"] == d2["name"]:
            if isinstance(d1["task"], list):
                d1["task"] =  d1["task"] + [d2["task"]]
                task_list.remove(d2)
            else:
                d1["task"] = [d1["task"], d2["task"]]
                task_list.remove(d2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64882722

复制
相关文章

相似问题

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