计算由另一个元素分组的JSON元素中项目的出现

时间:2019-02-22 19:27:55

标签: python-3.x

我试图计算一个项目(活动)在另一个项目(源)分组的json文件中的出现次数。下面的示例json。

{
    "No": "9",
    "Time": "08:12",
    "Source": "location1",
    "Dest": "location3",
    "Activity": "fast"
}

到目前为止,我下面的代码计算了每个活动的发生次数

from collections import Counter
import json

with open('dataset_3.json', 'r') as json_file:
    json_data = json.load(json_file)  # loads json data
    c = Counter(item['Activity'] for item in json_data)
    print(c)

该代码正确计数并在下面输出。

Counter({'fast':8,'medium':1,'slow':1})

我现在想再次计算每次活动的发生,但按位置分组,因此输出应类似于:

位置1快:8,中:1,慢:2

位置2快:6,中:3,慢:4

我尝试了以下代码,但输出不正确(请参见下文)

with open('dataset_3.json', 'r') as json_file:
    json_data = json.load(json_file)  # loads json data
    for item in json_data:
        if item['Source'] == 'location1':
            c = Counter(item['Activity'])
            print(c)

输出

Counter({'f': 3, 'a': 1, 's': 1, 't'})
Counter({'s': 1, 'l': 1, 'o': 1, 'w'})

1 个答案:

答案 0 :(得分:1)

您可以将if放在Counter的生成器语句中,以向for循环中添加条件。我用以下修复程序粘贴了您的代码:

from collections import Counter
import json

with open('dataset_3.json', 'r') as json_file:
    json_data = json.load(json_file)  # loads json data
    c = Counter(item['Activity'] for item in json_data if item['Source'] == 'location1')
    print(c)