TransWikia.com

JSON и работа со словарями

Stack Overflow на русском Asked on November 10, 2021

Нужно написать функцию age_count, которая принимает json-строку следующего вида:

{
    "workers": [
        {"name": "Имя1", "age": 34, "occupation": "Программист"},
        {"name": "Имя2", "age": 24, "occupation": "Программист"},
        {"name": "Имя3", "age": 40, "occupation": "Грузчик"}
    ]
}

Далее в функции нужно посчитать средний возраст по каждой из профессий и сохранить в файл age.json этот возраст в следующем виде:

{
    "Программист": 29.0,
    "Грузчик": 40.0
}

Также результирующий json должен быть выведен на экран в конце выполнения функции.

Вот тут я перевёл json-строку и получаю словарь, который имеет один ключ и одно значение, но в значение список из словарей.

import json
    def age_count(x):
        x = json.loads('{ "workers": [{"name": "Имя1", "age": 34, "occupation": "Программист"}, {"name": "Имя2", "age": 24, "occupation": "Программист"}, {"name": "Имя3", "age": 40, "occupation": "Грузчик"} ] }')

Как найти среднее значение в списке из разных словарей?

Думал попробовать сделать, так

if x[1][occupation] == "Программист":
            m_sum = sum(x[1][age].values)/len(x[1][age])

Но не уверен что это правильно.

2 Answers

import json def age_count(x):

s = ('{ "workers": [{"name": "Имя1", "age": 34, "occupation": "Программист"}, {"name": "Имя2", "age": 24, "occupation": "Программист"}, {"name": "Имя3", "age": 40, "occupation": "Грузчик"} ] }')


r = {}

for x in json.loads(s)['workers'] :

r.setdefault(x["occupation"],[]).append(x["age"])

for x in r.keys() :

r[x] = sum(r[x])/len(r[x])

print(r)

with open("input.txt") as f: age_count(f.read())

Answered by Andrey on November 10, 2021

s ='''
{
    "workers": [
        {"name": "Имя1", "age": 34, "occupation": "Программист"},
        {"name": "Имя2", "age": 24, "occupation": "Программист"},
        {"name": "Имя3", "age": 40, "occupation": "Грузчик"}
    ]
}
'''

import json


r = {}
for x in json.loads(s)['workers'] :
    r.setdefault(x["occupation"],[]).append(x["age"])
for x in r.keys() :
    r[x] = sum(r[x])/len(r[x])
print(r)

Answered by splash58 on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP