[英]Count occurences of item in dictionary?
我有兩個合並的 JSON 文件(保存為字典)。 我想計算給定名稱出現的次數。 這是我的文件的示例:
{
'user_id': 1
'id': 1
'name': 'Name1',
'surname': 'Surname1'
}
{
'user_id': 2
'id': 2
'name': 'Name1',
'surname': 'Surname2'
}
{
'user_id': 3
'id': 3
'name': 'Name2',
'surname': 'Surname3'
}
我想知道文件中存在多少次“Name1”。 我嘗試對每個項目使用 Counter
c = Counter([x['name']])
但是在我得到的每一件物品之后
Counter({'Name1': 1})
Counter({'Name1': 1})
Counter({'Name2': 1})
這要怎么總結?
這就是我現在得到的:
response = requests.get("https://jsonplaceholder.typicode.com/posts")
file1 = json.loads(response.text)
response2 = requests.get("https://jsonplaceholder.typicode.com/users")
file2 = json.loads(response2.text)
for i in file1:
for j in file2:
if i["userId"] == j["id"]:
x = list()
x = i.copy()
x.append(j)
print(x)
c = Counter([x['name']])
您需要一個整體Counter
,而不是每個子字典一個:
response = requests.get("https://jsonplaceholder.typicode.com/posts")
posts = response.json()
response2 = requests.get("https://jsonplaceholder.typicode.com/users")
users = response2.json()
c = Counter()
for post in posts:
for user in users:
if post["userId"] == user["id"]:
c[user['name']] += 1
除了將json.loads
與response.text
一起使用之外,您還可以只使用response.json()
。
您需要更新當前計數器,而不是創建新計數器。 要更新,您可以簡單地添加到計數器。
c += Counter([x['name']])
您的代碼存在許多問題,最緊迫的一個可能是列表和字典之間的混淆,它們是具有不同接口的非常不同的類型。 接下來是二次運行時,您可以通過擁有一個包含所有用戶和帖子的新字典來避免這種情況。
from collections import Counter
import requests
users = requests.get("https://jsonplaceholder.typicode.com/users").json()
posts = requests.get("https://jsonplaceholder.typicode.com/posts").json()
users_with_posts = {user['id']: {'posts': [], **user} for user in users}
for post in posts:
users_with_posts[post['userId']]['posts'].append(post)
nameCounter = Counter({user['name']: len(user['posts']) for user in users_with_posts.values()})
這假設您想要對用戶和帖子做更多的事情,否則我們可以稍微簡化代碼。
另請注意,運行時現在是線性的( O(len(users) + len(posts))
)而不是二次的( O(len(users) * len(posts))
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.