Извлечение значений из вложенного словаря из текстового файла в JSON - PullRequest
0 голосов
/ 16 июня 2020

Текстовый файл содержит словарь словаря. В этом текстовом файле для примера «2018» действует, так как далее «8» - это месяц, который является значением для «2018», но ключом для следующего словаря. Я хочу получить значения total_queries_count, total_dislike, unique_users.

{"2018":
    {"8":{ "total_queries_count": 4,
        "queries_without_teachers": 3,
        "non_teacher_queries": 1,
        "total_dislike": 0,
        "unique_users": [", "landmark", "232843"],
        "user_dislike": 0
        },
    "9":{ "total_queries_count": 1021,
     "queries_without_teachers": 0,
        "non_teacher_queries": 1021,
        "total_dislike": 0,
        "unique_users": [", "1465146", "14657", "dfgf", "1123", "456", "1461546", "Ra", "siva", "234", "ramesh", "3456", "23", "43567", "sfdf", "sdsd", "ra", "sddff", "1234", "rames", "RAM", "444", "123", "333", "RAM", "789", "itassistant", "rame", "12345"],
        "user_dislike": 0},
    "10": {"total_queries_count": 352,
     "queries_without_teachers": 1,
         "non_teacher_queries": 351,
         "total_dislike": 0,
         "unique_users": [", "1465146", "777", "43567", "1234", "456", "123456", "12345", "232843"],
         "user_dislike": 0
         },
    "11": {"total_queries_count": 180,
        "queries_without_teachers": 0,
            "non_teacher_queries": 180,
            "total_dislike": 12,
            "unique_users": [", "75757575", "9000115", "9000157", "9000494", "9000164", "123453"],
            "user_dislike": 12},
    "12": {"total_queries_count": 266,
        "queries_without_teachers": 0,
           "non_teacher_queries": 266,
           "total_dislike": 16,
           "unique_users": [", "131422", "121550", "9000508", "9000560", "9000115", "9000371", "9000372", "93979", "146625", "114586", "165937", "9000494", "9000463", "38404", "129458", "62948", "125143", "9000179", "9000145", "9000001", "9000164", "81849", "102663", "9000123", "105407", "33517", "21344", "9000213", "202074", "9000103", "18187", "9000342", "9000125", "9000100", "9000187", "18341", "9000181", "168802", "9000529", "12345", "110127", "9000134", "100190", "9000352", "9000156", "9000055", "tcs_hariharas", "9000078", "204101", "9000050", "9000139"],
           "user_dislike": 16}
          }
}

1 Ответ

0 голосов
/ 16 июня 2020

Проверьте https://docs.python.org/3/tutorial/datastructures.html#dictionaries

Вы можете получить доступ к необходимым ключам следующим образом:

# assuming your initial nested dict is called 'data'
data["2018"]["8"]["total_queries_count"]

Если вы хотите агрегировать данные за все годы и месяцы в одном месте , вы можете сделать это:

overall_queries = 0
overall_dislikes = 0
users = set()  # this is a set not a list in order to preserve uniqueness of users
for year in data:  # year is a key in data dict
    for month in data[year]:  # month is a key in data[year] dict
        users.update(data[year][month]["unique_users"])
        overall_queries += data[year][month]["total_queries_count"]
        overall_dislikes += data[year][month]["total_dislike"]

Если вы хотите, чтобы результат был разделен годами, вы можете сделать это:

result = {}
for year in data:
    overall_queries = 0
    overall_dislikes = 0
    users = set()
    for month in data[year]:
        overall_queries += data[year][month]["total_queries_count"]
        overall_dislikes += data[year][month]["total_dislike"]
        users.update(data[year][month]["unique_users"])
    result[year] = {
        "overall_queries": overall_queries,
        "overall_dislikes": overall_dislikes,
        "users": users,
    }

Результат:

{'2018': {'overall_dislikes': 28,
          'overall_queries': 1823,
          'users': {'100190',
                    '102663',
                    '105407',
                    '110127',
                    ...}}}
...