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

问题描述 投票:1回答:3

我有以下代码:

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}}

您能解释一下,为什么会这样吗?

python
3个回答
4
投票

stat同时传递给键“切尔西”和“阿森纳”作为参考。您需要创建它的副本。

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)

0
投票

尝试复制字典以避免用相同的参考文献更新字典

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}}

0
投票

每次要使用相同结构时,请在字典上使用copy

some = {}
stat = {'matches_played': 0, 'won': 0, 'draws': 0, 'loss': 0, 'points': 0}
some = {'Arsenal': stat.copy()}
some.update({'Chelsea': stat.copy()})
some['Arsenal']['won'] += 1
some['Chelsea']['loss'] += 1
print(some)
© www.soinside.com 2019 - 2024. All rights reserved.