I have a list of dictionaries:
data = [
{'name': 'foo', 'scores': [2]},
{'name': 'bar', 'scores': [4, 9, 3]},
{'name': 'baz', 'scores': [6, 1]}
]
I want to create a new list which has each individual score
separated out like this:
list = [
{'name': 'foo', 'scores': [2], 'score': 2},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 4},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 9},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 3},
{'name': 'baz', 'scores': [6, 1], 'score': 6},
{'name': 'baz', 'scores': [6, 1], 'score': 1}
]
I can then loop through each row
, and each score
, to create a new dictionary:
for row in data:
scores = row['scores'] # list of values
for score in scores:
new_row = row
new_row['score'] = score
print(new_row)
Which gives me exactly what I want:
{'name': 'foo', 'scores': [2], 'score': 2}
{'name': 'bar', 'scores': [4, 9, 3], 'score': 4}
{'name': 'bar', 'scores': [4, 9, 3], 'score': 9}
{'name': 'bar', 'scores': [4, 9, 3], 'score': 3}
{'name': 'baz', 'scores': [6, 1], 'score': 6}
{'name': 'baz', 'scores': [6, 1], 'score': 1}
However, I'm having trouble adding these dictionaries to a list. When I use the append()
function to add each dictionary to a new list:
list = []
for row in data:
scores = row['scores'] # list of values
for score in scores:
new_row = row
new_row['score'] = score
list.append(new_row)
print(list)
It seems to overwrite some of the previous items:
[
{'name': 'foo', 'scores': [2], 'score': 2},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 3},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 3},
{'name': 'bar', 'scores': [4, 9, 3], 'score': 3},
{'name': 'baz', 'scores': [6, 1], 'score': 1},
{'name': 'baz', 'scores': [6, 1], 'score': 1}
]
What's going on here? Why is it printing the rows correctly, but overwriting previous items when adding to a list? I thought append()
simply adds new items to the end of a list without altering other items?