Reputation: 680
I wasn't sure how to word the title, but basically I have the following:
{
"restaurantName": "Restaurant 1",
"restaurantLink": "Link 1",
"restaurantType": "Type 1",
"restaurantAddress": "Address 1",
"dateRetrieved": "14-11-2018",
"review": {
"reviewer": "Reviewer 1",
"reviewDetail": "Review Detail 1"
}
}
I'm trying to add new review
to the review key, so the final output would look like this depending on how many reviews a restaurant have:
{
"restaurantName": "Restaurant 1",
"restaurantLink": "Link 1",
"restaurantType": "Type 1",
"restaurantAddress": "Address 1",
"dateRetrieved": "14-11-2018",
"review": [
{
"reviewer": "Reviewer 1",
"reviewDetail": "Review Detail 1"
},
{
"reviewer": "Reviewer 2",
"reviewDetail": "Review Detail 2"
},{
"reviewer": "Reviewer 3",
"reviewDetail": "Review Detail 3"
},
...
...
]
}
My current code is:
for review in reviews:
HungrygowhereItem['review'] = {
[
'reviewer': reviewer,
'reviewDetail': reviewDetail
]
}
Where HungrygowhereItem
is an existing dictionary
It would only store Reviewer 1
and Review Detail 1
. How would I append a new list to the dictionary?
I found this: Append items to dictionary , it's relevant to my question, but in different language.
Upvotes: 1
Views: 73
Reputation: 41
If I understand you correctly, you would like to append value to array in existing dict, so for the following dict for example:
_dict = {
"restaurantName": "Restaurant 1",
"restaurantLink": "Link 1",
"restaurantType": "Type 1",
"restaurantAddress": "Address 1",
"dateRetrieved": "14-11-2018",
"review": [
{
"reviewer": "Reviewer 1",
"reviewDetail": "Review Detail 1"
},
{
"reviewer": "Reviewer 2",
"reviewDetail": "Review Detail 2"
},{
"reviewer": "Reviewer 3",
"reviewDetail": "Review Detail 3"
}
]
}
append value into review:
_dict['review'].append( {
"reviewer": "Reviewer 4",
"reviewDetail": "Review Detail 4"
})
In your case, if HungrygowhereItem is a dictionary:
for review in reviews:
if 'review' in HungrygowhereItem:
HungrygowhereItem['review'].append({
'reviewer': reviewer,
'reviewDetail': reviewDetail
})
else:
HungrygowhereItem['review'] = [{
'reviewer': reviewer,
'reviewDetail': reviewDetail
}]
Upvotes: 1
Reputation: 78770
First, make the value for the key 'review'
a list.
>>> restaurant = {
...: "restaurantName": "Restaurant 1",
...: "restaurantLink": "Link 1",
...: "restaurantType": "Type 1",
...: "restaurantAddress": "Address 1",
...: "dateRetrieved": "14-11-2018",
...: "review": {
...: "reviewer": "Reviewer 1",
...: "reviewDetail": "Review Detail 1"
...: }
...:}
>>>
>>> restaurant['review'] = [restaurant['review']]
>>> restaurant['review']
>>> [{'reviewDetail': 'Review Detail 1', 'reviewer': 'Reviewer 1'}]
Now you can append to that list.
>>> reviews = [{"reviewer": "Reviewer 2",
...: "reviewDetail": "Review Detail 2"},
...: {"reviewer": "Reviewer 3",
...: "reviewDetail": "Review Detail 3"}]
...:
>>> for review in reviews:
...: restaurant['review'].append(review)
...:
>>> restaurant['review']
>>>
[{'reviewDetail': 'Review Detail 1', 'reviewer': 'Reviewer 1'},
{'reviewDetail': 'Review Detail 2', 'reviewer': 'Reviewer 2'},
{'reviewDetail': 'Review Detail 3', 'reviewer': 'Reviewer 3'}]
You could also make restaurant
a defaultdict
without a 'review'
key if you can fix the code upstream.
>>> from collections import defaultdict
>>> restaurant = {
...: "restaurantName": "Restaurant 1",
...: "restaurantLink": "Link 1",
...: "restaurantType": "Type 1",
...: "restaurantAddress": "Address 1",
...: "dateRetrieved": "14-11-2018"
...:}
>>>
>>> restaurant = defaultdict(list, restaurant)
>>> reviews = [{"reviewer": "Reviewer 1",
...: "reviewDetail": "Review Detail1"},
...: {"reviewer": "Reviewer 2",
...: "reviewDetail": "Review Detail 2"},
...: {"reviewer": "Reviewer 3",
...: "reviewDetail": "Review Detail 3"}]
...:
>>> restaurant['reviews'].extend(reviews)
>>> restaurant['reviews']
>>>
[{'reviewDetail': 'Review Detail1', 'reviewer': 'Reviewer 1'},
{'reviewDetail': 'Review Detail 2', 'reviewer': 'Reviewer 2'},
{'reviewDetail': 'Review Detail 3', 'reviewer': 'Reviewer 3'}]
As an alternative to restaurant
being a defaultdict
, you could just set the value of the key 'reviews'
to an empty list before adding any reviews.
Upvotes: 1
Reputation: 22679
You have to start with a little bit different review
structure:
restaurant = {
...,
"review": []
}
Note, that review
is a list here.
Hence, adding a review to that list is just a basic list operation:
restaurant['review'].append({
"reviewer": "Reviewer 1",
"reviewDetail": "Review Detail 1"
})
Upvotes: 1