在Python中,我有一个字典列表。我希望计数每个名称的出现情况,但也希望将其他数据与其合并。
这是输入
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"
}
]预期产出
[
{
"name": "user1",
"email": "user1@gmail.com",
"task": ["12121", "14141"],
"count": 2
},
{
"name": "user2",
"email": "user2@gmail.com",
"task": ["13131"],
"count": 1
}
]目前,我只获得每个用户的计数,但我不知道如何将其他信息与计数合并。
这是我的密码
counts = {}
for task in task_list:
if task["name"] not in counts.keys():
counts[task["name"]] = 1
else:
counts[task["name"]] +=1这是我目前正在做的输出
[
{
"name": "user1",
"count": 2
},
{
"name": "user2",
"count": 1
}
]我所能想到的就是循环5-6次并生成预期的输出。但我认为这是个糟糕的解决方案。是否有任何软件包或其他解决方案来完成这一任务?
发布于 2020-11-17 20:34:36
熊猫可以做这件事
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')[{'name': 'user1', 'email': 'user1@gmail.com', 'task': ['12121', '14141'], 'count': 2}, {'name': 'user2', 'email': 'user2@gmail.com', 'task': ['13131'], 'count': 1}]发布于 2020-11-17 21:01:44
这段代码是为我做的:
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)https://stackoverflow.com/questions/64882722
复制相似问题