如何正确更新dict中的dict?(Python)



我有以下代码:

some = {}
stat = {'matches_played': 0, 'won': 0, 'draws': 0, 'loss': 0, 'points': 0}
some = {'Arsenal': stat}
some.update({'Chelsea': stat})
some['Arsenal']['won'] += 1
some['Chelsea']['loss'] += 1
print(some)

结果是:

{'Arsenal': {'matches_played': 0, 'won': 1, 'draws': 0, 'loss': 1, 'points': 0}, 
'Chelsea': {'matches_played': 0, 'won': 1, 'draws': 0, 'loss': 1, 'points': 0}}

但是,我需要

{'Arsenal': {'matches_played': 0, 'won': 1, 'draws': 0, 'loss': 0, 'points': 0}, 
'Chelsea': {'matches_played': 0, 'won': 0, 'draws': 0, 'loss': 1, 'points': 0}}

你能解释一下为什么会发生这种事吗?

stat被传递给密钥"Chelsea"one_answers"Arsenal"作为参考。你需要创建它的副本。

some = {}
stat = {'matches_played': 0, 'won': 0, 'draws': 0, 'loss': 0, 'points': 0}
some = {'Arsenal': stat}
some.update({'Chelsea': stat.copy()}) # <---- fix it here
some['Arsenal']['won'] += 1
some['Chelsea']['loss'] += 1
print(some)

尝试复制dict以避免使用相同的引用更新dict

import copy
some = {}
stat = {'matches_played': 0, 'won': 0, 'draws': 0, 'loss': 0, 'points': 0}
some = {'Arsenal': copy.deepcopy(stat), 'Chelsea' : copy.deepcopy(stat)}

some['Arsenal']['won'] += 1
some['Chelsea']['loss'] += 1
print(some)
Results: {'Chelsea': {'loss': 1, 'won': 0, 'draws': 0, 'matches_played': 0, 'points': 0}, 'Arsenal': {'loss': 0, 'won': 1, 'draws': 0, 'matches_played': 0, 'points': 0}}

最新更新