gpt4 book ai didi

python - 如何避免 Python 中的双循环?

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:43 24 4
gpt4 key购买 nike

来自 https://jsonplaceholder.typicode.com/todos 处的数据我想按用户计算“已完成”的项目。

目前,我通过首先收集现有的用户 ID 键来解决这个问题,然后为数据集中的每个元素检查它是否为当前用户所有,并将其附加到该用户的项目列表中。

users_items = {}

import json
from urllib import request

# Data from
uri = "https://jsonplaceholder.typicode.com/todos"

response = request.urlopen(uri).read()
data = json.loads(response)

def get_user_ids(items):
for item in items:
users_items[item['userId']] = None

def get_user_items():
for uid in users_items:
items = []
for item in data:
if(item['userId'] == uid):
items.append(item['completed'])
users_items[uid] = items

done_items_by_user = {}
def count_completed_by_user():
for user in users_items:
done_items_by_user[user] = sum(users_items[user])

get_user_ids(data)
get_user_items()

我特别不喜欢 get_users_ids 中的双循环和用空列表初始化字典值。

最佳答案

只需 defaultdict对象:

import json
from urllib import request
from collections import defaultdict

# Data from
uri = "https://jsonplaceholder.typicode.com/todos"

response = request.urlopen(uri).read()
data = json.loads(response)


def count_user_completed_items(data):
result = defaultdict(int)
for item in data:
if item['completed']: result[item['userId']] += 1
return dict(result)


print(count_user_completed_items(data))

输出(其中键是“用户 ID”,值是一些“完成”项):

{1: 11, 2: 8, 3: 7, 4: 6, 5: 12, 6: 6, 7: 9, 8: 11, 9: 8, 10: 12}

关于python - 如何避免 Python 中的双循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56459607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com