簡體   English   中英

計算字典中項目的出現次數?

[英]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.loadsresponse.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM