Trying to find sums of unique values within a nested dictionary. (See example!)
Let's say I have this variable list_1 which is a list of dictionaries.
Each dictionary has a nested dictionary called "group" in which it has some information including "name".
What I'm trying to do is to sum the scores of each unique group name.
So I am looking for an output similar to:
Total Scores in (Ceramics) = (18)
Total Scores in (Math) = (20)
Total Scores in (History) = (5)
I have the above info in parenthesis because I would like this code to work regardless of the amount of items in the list, or amount of unique groups represented.
The list_1 variable:
list_1 = [
"title" : "Painting",
"score" : 8,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Exam 1",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Clay Model",
"score" : 10,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Homework 3",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Report 1",
"score" : 5,
"group" : "name" : "History",
"id" : 209
,
]
My first idea was to create a new list variable and append each unique group name. Here's the code for that. But will this help in ultimately finding the sum of the scores for each one of these?
group_names_list =
for item in list_1:
group_name = item["group"]["name"]
if group_name not in group_names_list:
group_names_list.append(group_name)
This gives me the value of group_names_list as:
['Ceramics','Math','History']
Any help or suggestions are appreciated! Thanks.
python dictionary nested
add a comment |
Let's say I have this variable list_1 which is a list of dictionaries.
Each dictionary has a nested dictionary called "group" in which it has some information including "name".
What I'm trying to do is to sum the scores of each unique group name.
So I am looking for an output similar to:
Total Scores in (Ceramics) = (18)
Total Scores in (Math) = (20)
Total Scores in (History) = (5)
I have the above info in parenthesis because I would like this code to work regardless of the amount of items in the list, or amount of unique groups represented.
The list_1 variable:
list_1 = [
"title" : "Painting",
"score" : 8,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Exam 1",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Clay Model",
"score" : 10,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Homework 3",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Report 1",
"score" : 5,
"group" : "name" : "History",
"id" : 209
,
]
My first idea was to create a new list variable and append each unique group name. Here's the code for that. But will this help in ultimately finding the sum of the scores for each one of these?
group_names_list =
for item in list_1:
group_name = item["group"]["name"]
if group_name not in group_names_list:
group_names_list.append(group_name)
This gives me the value of group_names_list as:
['Ceramics','Math','History']
Any help or suggestions are appreciated! Thanks.
python dictionary nested
1
Try to process each item completely as the code reads it. Maybe make thegroup_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append[title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. Sogroup_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20
add a comment |
Let's say I have this variable list_1 which is a list of dictionaries.
Each dictionary has a nested dictionary called "group" in which it has some information including "name".
What I'm trying to do is to sum the scores of each unique group name.
So I am looking for an output similar to:
Total Scores in (Ceramics) = (18)
Total Scores in (Math) = (20)
Total Scores in (History) = (5)
I have the above info in parenthesis because I would like this code to work regardless of the amount of items in the list, or amount of unique groups represented.
The list_1 variable:
list_1 = [
"title" : "Painting",
"score" : 8,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Exam 1",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Clay Model",
"score" : 10,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Homework 3",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Report 1",
"score" : 5,
"group" : "name" : "History",
"id" : 209
,
]
My first idea was to create a new list variable and append each unique group name. Here's the code for that. But will this help in ultimately finding the sum of the scores for each one of these?
group_names_list =
for item in list_1:
group_name = item["group"]["name"]
if group_name not in group_names_list:
group_names_list.append(group_name)
This gives me the value of group_names_list as:
['Ceramics','Math','History']
Any help or suggestions are appreciated! Thanks.
python dictionary nested
Let's say I have this variable list_1 which is a list of dictionaries.
Each dictionary has a nested dictionary called "group" in which it has some information including "name".
What I'm trying to do is to sum the scores of each unique group name.
So I am looking for an output similar to:
Total Scores in (Ceramics) = (18)
Total Scores in (Math) = (20)
Total Scores in (History) = (5)
I have the above info in parenthesis because I would like this code to work regardless of the amount of items in the list, or amount of unique groups represented.
The list_1 variable:
list_1 = [
"title" : "Painting",
"score" : 8,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Exam 1",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Clay Model",
"score" : 10,
"group" : "name" : "Ceramics",
"id" : 391
,
"title" : "Homework 3",
"score" : 10,
"group" : "name" : "Math",
"id" : 554
,
"title" : "Report 1",
"score" : 5,
"group" : "name" : "History",
"id" : 209
,
]
My first idea was to create a new list variable and append each unique group name. Here's the code for that. But will this help in ultimately finding the sum of the scores for each one of these?
group_names_list =
for item in list_1:
group_name = item["group"]["name"]
if group_name not in group_names_list:
group_names_list.append(group_name)
This gives me the value of group_names_list as:
['Ceramics','Math','History']
Any help or suggestions are appreciated! Thanks.
python dictionary nested
python dictionary nested
asked Nov 14 '18 at 0:11
Jane SmithJane Smith
333
333
1
Try to process each item completely as the code reads it. Maybe make thegroup_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append[title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. Sogroup_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20
add a comment |
1
Try to process each item completely as the code reads it. Maybe make thegroup_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append[title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. Sogroup_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20
1
1
Try to process each item completely as the code reads it. Maybe make the
group_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append [title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. So group_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20
Try to process each item completely as the code reads it. Maybe make the
group_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append [title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. So group_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20
add a comment |
3 Answers
3
active
oldest
votes
You can use a dict to keep track of scores per name:
score_dict = dict()
for d in list_1:
name = d['group']['name']
if name in score_dict:
score_dict[name] += d['score']
else:
score_dict[name] = d['score']
print(score_dict)
RESULTS:
'Ceramics': 18, 'Math': 20, 'History': 5
add a comment |
data =
for item in list_1: # for each item in our list
# set our category to its existing value (or 0) + the new score
data[item['group']['name']] = item['score'] + data.get(item['group']['name'],0)
print(data) # output = 'History': 5, 'Math': 20, 'Ceramics': 18
then you can print it easy enough using format strings
for group_name,scores_summed in data.items():
print("Totals for group_name = scores_summed".format(group_name=group_name,scores_summed=scores_summed))
add a comment |
Both the answers of @JacobIRR and @JoranBeasley are great, as alternative you could do the following:
data = [
"title": "Painting", "score": 8, "group": "name": "Ceramics", "id": 391,
"title": "Exam 1", "score": 10, "group": "name": "Math", "id": 554,
"title": "Clay Model", "score": 10, "group": "name": "Ceramics", "id": 391,
"title": "Homework 3", "score": 10, "group": "name": "Math", "id": 554,
"title": "Report 1", "score": 5, "group": "name": "History", "id": 209
]
result =
scores = iter((e['group']['name'], e['score']) for e in data)
for name, score in scores:
result[name] = result.get(name, 0) + score
print(result)
Output
'Ceramics': 18, 'History': 5, 'Math': 20
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291314%2ftrying-to-find-sums-of-unique-values-within-a-nested-dictionary-see-example%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use a dict to keep track of scores per name:
score_dict = dict()
for d in list_1:
name = d['group']['name']
if name in score_dict:
score_dict[name] += d['score']
else:
score_dict[name] = d['score']
print(score_dict)
RESULTS:
'Ceramics': 18, 'Math': 20, 'History': 5
add a comment |
You can use a dict to keep track of scores per name:
score_dict = dict()
for d in list_1:
name = d['group']['name']
if name in score_dict:
score_dict[name] += d['score']
else:
score_dict[name] = d['score']
print(score_dict)
RESULTS:
'Ceramics': 18, 'Math': 20, 'History': 5
add a comment |
You can use a dict to keep track of scores per name:
score_dict = dict()
for d in list_1:
name = d['group']['name']
if name in score_dict:
score_dict[name] += d['score']
else:
score_dict[name] = d['score']
print(score_dict)
RESULTS:
'Ceramics': 18, 'Math': 20, 'History': 5
You can use a dict to keep track of scores per name:
score_dict = dict()
for d in list_1:
name = d['group']['name']
if name in score_dict:
score_dict[name] += d['score']
else:
score_dict[name] = d['score']
print(score_dict)
RESULTS:
'Ceramics': 18, 'Math': 20, 'History': 5
answered Nov 14 '18 at 0:21
JacobIRRJacobIRR
3,41521228
3,41521228
add a comment |
add a comment |
data =
for item in list_1: # for each item in our list
# set our category to its existing value (or 0) + the new score
data[item['group']['name']] = item['score'] + data.get(item['group']['name'],0)
print(data) # output = 'History': 5, 'Math': 20, 'Ceramics': 18
then you can print it easy enough using format strings
for group_name,scores_summed in data.items():
print("Totals for group_name = scores_summed".format(group_name=group_name,scores_summed=scores_summed))
add a comment |
data =
for item in list_1: # for each item in our list
# set our category to its existing value (or 0) + the new score
data[item['group']['name']] = item['score'] + data.get(item['group']['name'],0)
print(data) # output = 'History': 5, 'Math': 20, 'Ceramics': 18
then you can print it easy enough using format strings
for group_name,scores_summed in data.items():
print("Totals for group_name = scores_summed".format(group_name=group_name,scores_summed=scores_summed))
add a comment |
data =
for item in list_1: # for each item in our list
# set our category to its existing value (or 0) + the new score
data[item['group']['name']] = item['score'] + data.get(item['group']['name'],0)
print(data) # output = 'History': 5, 'Math': 20, 'Ceramics': 18
then you can print it easy enough using format strings
for group_name,scores_summed in data.items():
print("Totals for group_name = scores_summed".format(group_name=group_name,scores_summed=scores_summed))
data =
for item in list_1: # for each item in our list
# set our category to its existing value (or 0) + the new score
data[item['group']['name']] = item['score'] + data.get(item['group']['name'],0)
print(data) # output = 'History': 5, 'Math': 20, 'Ceramics': 18
then you can print it easy enough using format strings
for group_name,scores_summed in data.items():
print("Totals for group_name = scores_summed".format(group_name=group_name,scores_summed=scores_summed))
answered Nov 14 '18 at 0:18
Joran BeasleyJoran Beasley
73k678118
73k678118
add a comment |
add a comment |
Both the answers of @JacobIRR and @JoranBeasley are great, as alternative you could do the following:
data = [
"title": "Painting", "score": 8, "group": "name": "Ceramics", "id": 391,
"title": "Exam 1", "score": 10, "group": "name": "Math", "id": 554,
"title": "Clay Model", "score": 10, "group": "name": "Ceramics", "id": 391,
"title": "Homework 3", "score": 10, "group": "name": "Math", "id": 554,
"title": "Report 1", "score": 5, "group": "name": "History", "id": 209
]
result =
scores = iter((e['group']['name'], e['score']) for e in data)
for name, score in scores:
result[name] = result.get(name, 0) + score
print(result)
Output
'Ceramics': 18, 'History': 5, 'Math': 20
add a comment |
Both the answers of @JacobIRR and @JoranBeasley are great, as alternative you could do the following:
data = [
"title": "Painting", "score": 8, "group": "name": "Ceramics", "id": 391,
"title": "Exam 1", "score": 10, "group": "name": "Math", "id": 554,
"title": "Clay Model", "score": 10, "group": "name": "Ceramics", "id": 391,
"title": "Homework 3", "score": 10, "group": "name": "Math", "id": 554,
"title": "Report 1", "score": 5, "group": "name": "History", "id": 209
]
result =
scores = iter((e['group']['name'], e['score']) for e in data)
for name, score in scores:
result[name] = result.get(name, 0) + score
print(result)
Output
'Ceramics': 18, 'History': 5, 'Math': 20
add a comment |
Both the answers of @JacobIRR and @JoranBeasley are great, as alternative you could do the following:
data = [
"title": "Painting", "score": 8, "group": "name": "Ceramics", "id": 391,
"title": "Exam 1", "score": 10, "group": "name": "Math", "id": 554,
"title": "Clay Model", "score": 10, "group": "name": "Ceramics", "id": 391,
"title": "Homework 3", "score": 10, "group": "name": "Math", "id": 554,
"title": "Report 1", "score": 5, "group": "name": "History", "id": 209
]
result =
scores = iter((e['group']['name'], e['score']) for e in data)
for name, score in scores:
result[name] = result.get(name, 0) + score
print(result)
Output
'Ceramics': 18, 'History': 5, 'Math': 20
Both the answers of @JacobIRR and @JoranBeasley are great, as alternative you could do the following:
data = [
"title": "Painting", "score": 8, "group": "name": "Ceramics", "id": 391,
"title": "Exam 1", "score": 10, "group": "name": "Math", "id": 554,
"title": "Clay Model", "score": 10, "group": "name": "Ceramics", "id": 391,
"title": "Homework 3", "score": 10, "group": "name": "Math", "id": 554,
"title": "Report 1", "score": 5, "group": "name": "History", "id": 209
]
result =
scores = iter((e['group']['name'], e['score']) for e in data)
for name, score in scores:
result[name] = result.get(name, 0) + score
print(result)
Output
'Ceramics': 18, 'History': 5, 'Math': 20
answered Nov 14 '18 at 0:45
Daniel MesejoDaniel Mesejo
16.9k21430
16.9k21430
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291314%2ftrying-to-find-sums-of-unique-values-within-a-nested-dictionary-see-example%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Try to process each item completely as the code reads it. Maybe make the
group_names_list
a dictionary of group-name, and then a list of assignments with scores. As you read new items, append[title, score]
to this list. Once you have processed the input fully, do a second loop over your dictionary, summing all the scores for each group. Sogroup_names_list["math"] = [ [ "Exam1",10 ], [ "Homework 3", 10 ] ]
– Kingsley
Nov 14 '18 at 0:20