Python, как подсчитать уникальные комметры в текстовом файле json?
Я работаю над кодом Python, который подсчитывает количество уникальных комментаторов в чате, используя их уникальный идентификатор, найденный в имени поля “_id”, вложенном в имя поля комментаторов. JSON выглядит примерно так.
формат JSON:
{ "_id":"123adfvssw", "content_type":"video", "content_id":"12345", "commenter":{ "display_name":"student1", "name":"student1", "type":"user", }, "source":"chat", "state":"published", "message":{ "body":"Hi", "fragments":[ { "text":"Hi" } ], "is_action":false }, "more_replies":false } { "_id":"123adfvssw", "content_type":"video", "content_id":"12345", "commenter":{ "display_name":"student2", "name":"student2", "type":"user", }, "source":"chat", "state":"published", "message":{ "body":"Hey!", "fragments":[ { "text":"Hey" } ], "is_action":false }, "more_replies":false } { "_id":"123adfvssw", "content_type":"video", "content_id":"12345", "commenter":{ "display_name":"student1", "name":"student1", "type":"user", }, "source":"chat", "state":"published", "message":{ "body":"How are you?", "fragments":[ { "text":"How are you?" } ], "is_action":false }, "more_replies":false }
In all, the topic received 3 commenters. However, student1 commented more than once. So in retrospect, there are only two unique commenters in this thread. My question is how do I ensure that I only count the unique commenters using their _id field in the JSON? I am able to count all the commenter fields in the text but I am unable to count the unique commenters. The initial code I wrote counts all the commenters field which prints 3. However, the real answer is 2 since student1 commented twice. I am now trying to put the commenter's _id in an array/list so that I can count the ids that are unique. However, I am having some trouble storing the multiple values through a loop. Please help if you can.
Что я уже пробовал:
Code that Prints Number of Commenters Field: import json import requests from collections import Counter files ="/chatinfo.txt" with open(files) as f: commenters = 0 for line in f: jsondata = json.loads(line) if "commenter" in jsondata: commenters += 1 print(commenters) Output 3
Покушение на получение комментатор поля значение поля _id в массив/список, чтобы сравнить и подсчитать только уникальные комментаторы поля _id:
import json files = "/chatinfo.txt" with open(files) as f: num_with_field = 0 for line in f: jsondata = json.loads(line) dictjson = json.dumps(jsondata) if "commenter" in jsondata: commenterid = [] commenterid.append(jsondata["commenter"]["_id"]) print(commenterid) Output: ['193984934'] ['157255102'] ['100365638']
____________
Однако после этого я пытаюсь посмотреть, что находится в массиве/списке. Я получаю ['100365638'] вместо всех трех значений.
print(commenterid)
Output ['100365638']
Из этих трех, похоже, только 1 значение было сохранено в массиве/списке commenterid.
Проблема 1:
Может ли кто-нибудь помочь мне заполнить мой массив/список тремя значениями, которые мне нужны, используя цикл? Массив/список должен содержать ['193984934']['157255102']['100365638'].
Задача 2:
Кроме того, как я могу подсчитать уникальные идентификаторы в этом массиве? До сих пор я видел только, как подсчитать частоту идентификаторов.
Counter(commenterid).values() # counts the elements' frequency.
Вы думаете
len(set(commenterid))сработает ли это? Кроме того, если у вас есть лучший способ сделать это, кроме хранения нужных мне значений в массиве или списке, я бы хотел его увидеть. Заранее спасибо.
Richard Deeming
Если вы хотите удалить свой вопрос, то используйте кнопку Удалить, чтобы удалить свой вопрос.
НЕ вандализируйте свой вопрос, чтобы удалить содержимое. Особенно после того, как кто-то любезно нашел время ответить на ваш вопрос!
Я отбросил ваш вандализм.
amccants
Окей. Я новичок в Codeproject, и я не думал, что это было большое дело, так как на этот вопрос никогда не было настоящего ответа. И когда я имею в виду "не ответил", я имею в виду "не ответил" таким образом, чтобы получить истинное решение. Никто не ответил на него, поэтому я удалил содержание, чтобы придумать более краткий способ задать вопрос. Поэтому, когда я решил задать вопрос по-другому, он не был помечен как дубликат. Не думаю, что я что-то испортил. Это мой код.