Как создать сводку значений словаря через Python?
У меня есть приведенный ниже образец словаря,
errors = [{'PartitionKey': '34', 'RowKey': '14', 'Component': 'mamba', 'Environment': 'QA', 'Error': '404 not found', 'Group': 'Test', 'Job': 'cutting', 'JobType': 'automated'}, {'PartitionKey': '35', 'RowKey': '15', 'Component': 'mamba', 'Environment': 'QA', 'Error': '404 not found', 'Group': 'Test', 'Job': 'cutting', 'JobType': 'automated'}, {'PartitionKey': '36', 'RowKey': '16', 'Component': 'mamba', 'Environment': 'Dev', 'Error': '404 not found', 'Group': 'random', 'Job': 'moping', 'JobType': 'manual'}, {'PartitionKey': '37', 'RowKey': '17', 'Component': 'mamba', 'Environment': 'QA', 'Error': '404 not found', 'Group': 'Test', 'Job': 'cutting', 'JobType': 'automated'}, {'PartitionKey': '38', 'RowKey': '18', 'Component': 'mamba', 'Environment': 'Dev', 'Error': '404 not found', 'Group': 'random', 'Job': 'moping', 'JobType': 'manual'},{'PartitionKey': '39', 'RowKey': '19', 'Component': 'Scorpio', 'Environment': 'Dev', 'Error': '500 internal error', 'Group': 'minerva', 'Job': 'cleaning', 'JobType': 'manual'},{'PartitionKey': '39', 'RowKey': '19', 'Component': 'Scorpio', 'Environment': 'Dev', 'Error': '500 internal error', 'Group': 'minerva', 'Job': 'cleaning', 'JobType': 'manual'}]
Используя 9X_python-3.8 программу на Python, я пытаюсь найти для 9X_python3 каждой среды, сколько типов ошибок наблюдается 9X_python-3.x и сколько их. Что-то вроде
{
'QA': {
'404 not found': 10,
'500 internal error': 20,
'503 xyz': 30
},
'DEV': {
'404 not found': 10,
'500 internal error': 20,
'503 xyz': 30
}
}
Я пытаюсь добиться 9X_py3k этого с помощью Python itertools groupby. Вот 9X_pythonic фрагмент того, что я пытаюсь сделать, но 9X_python я не смог достичь именно того, чего хотел. Любая 9X_python3 помощь будет оценена
from itertools import groupby
grouped = collections.defaultdict(list)
newgrouped = collections.defaultdict(list)
for item in errors:
grouped[item['Environment']].append(item)
for key, vals in grouped.items():
for val in valss:
newgrouped[group['Error']].append(group)
Ответ #1
Ответ на вопрос: Как создать сводку значений словаря через Python?
Вы можете использовать dict.setdefault
для инициализации 9X_python-shell несуществующего ключа с суб-словом, где 9X_python-3 можно отслеживать количество ошибок:
from operator import itemgetter
summary = {}
for env, error in map(itemgetter('Environment', 'Error'), errors):
summary.setdefault(env, {})[error] = summary.get(env, {}).get(error, 0) + 1
Учитывая 9X_python3k введенный вами пример, summary
станет:
{'QA': {'404 not found': 3}, 'Dev': {'404 not found': 2, '500 internal error': 2}}
Демонстрация: https://replit.com/@blhsing/BogusVirtualKnowledge
Ответ #2
Ответ на вопрос: Как создать сводку значений словаря через Python?
Похоже, вы хотите dict(dict(int))
.
group = defaultdict(dict)
for a in errors:
if not group[a['Environment']]:
group[a['Environment']] = defaultdict(int)
group[a['Environment']][a['Error']]+=1
print(group)
9X_itertools
Ответ #3
Ответ на вопрос: Как создать сводку значений словаря через Python?
Я не знаком с mongodb, просто попробуйте 9X_python3 перенести его в dataframe:
errors_df = pd.DataFrame()
for dict in errors:
errors_df = errors_df.append(dict, ignore_index=True)
errors_env = errors_df.groupby(['Environment', 'Error']).count()
PartitionKey RowKey Component Group Job
Environment Error
Dev 404 not found 2 2 2 2 2
500 internal error 2 2 2 2 2
QA 404 not found 3 3 3 3 3
-
4
-
3
-
1
-
4
-
2
-
2
-
1
-
2
-
1
-
1
-
5
-
3
-
1
-
3
-
1
-
4
-
4
-
1
-
2
-
13
-
1
-
5
-
3
-
1
-
1
-
4
-
1
-
2
-
2
-
1
-
3
-
1
-
2
-
2
-
2
-
2
-
1
-
2
-
5
-
4
-
1
-
3
-
3
-
4
-
1
-
14
-
4
-
3
-
6
-
4