У меня есть список словарей:
data = [
{'name': 'foo', 'scores': [2]},
{'name': 'bar', 'scores': [4, 9, 3]},
{'name': 'baz', 'scores': [6, 1]}
]
Я хочу создать новый список, в котором каждый отдельный человек score
будет выделен следующим образом:
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}
]
Тогда я могупереберите все row
и score
, чтобы создать новый словарь:
for row in data:
scores = row['scores'] # list of values
for score in scores:
new_row = row
new_row['score'] = score
print(new_row)
, который дает мне именно то, что я хочу:
{'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}
Однако явозникли проблемы при добавлении этих словарей в список.Когда я использую функцию append()
для добавления каждого словаря в новый список:
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)
Кажется, что перезаписывает некоторые из предыдущих пунктов:
[
{'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}
]
Что тут происходит?Почему печатает строк правильно, но перезаписывает предыдущие элементы при добавлении в список?Я думал append()
просто добавляет новые элементы в конец списка, не изменяя другие элементы?