Reputation: 3
Here is JSON which I'm receiving from Smartsheet API:
{"rows":
[
{
"id":1315072712697732,
"cells":
[
{"columnId":3691535201003396,"value":"MyBooks","displayValue":"MyBooks"},
{"columnId":8195134828373892},
{"columnId":876785433896836,"value":"2018 Year","displayValue":"2018 Year"},
{"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
]
},
{
"id":5818672340068228,
"cells":
[
{"columnId":3691535201003396,"value":"MyBooks","displayValue":"MyBooks"},
{"columnId":8195134828373892},
{"columnId":876785433896836,"value":"2019 Year","displayValue":"2019 Year"},
{"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
]
},
{
"id":6381622293489540,
"cells":
[
{"columnId":3691535201003396,"value":"MyMovies","displayValue":"MyMovies"},
{"columnId":8195134828373892},
{"columnId":876785433896836,"value":"2027 Year","displayValue":"2027 Year"},
{"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
]
},
{
"id":6100147316778884,
"cells":
[
{"columnId":3691535201003396,"value":"MyMovies","displayValue":"MyMovies"},
{"columnId":8195134828373892},
{"columnId":876785433896836,"value":"2035 Year","displayValue":"2035 Year"},
{"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
]
},
{
"id":8351947130464132,
"cells":
[
{"columnId":3691535201003396,"value":"MyHobbies","displayValue":"MyHobbies"},
{"columnId":8195134828373892},
{"columnId":876785433896836,"value":"2037 Year","displayValue":"2037 Year"},
{"columnId":5380385061267332,"value":"http://google.com","displayValue":"http://google.com"}
]
}]}
Here is a piece of my python's code:
s = json.loads(myJson)
my_dictionary = []
for element in s['rows']:
my_dictionary.append({'category': element['cells'][0]['displayValue'],
'categoryId': element['cells'][1]['columnId'],
'pages': [
{'pageName': element['cells'][2]['displayValue'],
'pageURL': element['cells'][3]['displayValue']
}
]})
As I result I got dictionary with all data I need (without all unnecessary stuff), except one thing. I want to group it by category values. So output I want to achieve should looks similar to this:
"category": "MyMovies",
"categoryID": "8195134828373892"
"pages":
[
{"pageName": "2018 Year", "pageURL": "https://google.com"},
{"pageName": "2019 Year", "pageURL": "https://google.com"}
]
How can I do this?
Upvotes: 0
Views: 72
Reputation: 4377
You can do it with following code:
from collections import defaultdict
d = defaultdict(list)
for element in my_dictionary:
d[(element['categoryId'], element['category'])] += element['pages'] # merges all pages into one list
result = []
for element in sorted(d, key=lambda k: k[1]): # sort by category name
result.append({
'category': element[1],
'categoryId': element[0],
'pages': sorted(d[element], key=lambda e: e['pageName']) # sort by page name in pages list
})
print(result)
Upvotes: 1