我尝试使用dict.fromkeys([1,2,3],set())
。这个初始化创建了字典,但是当我向任何一个集合添加一个值时,所有集合都会更新!
>>> d=dict.fromkeys([1,2,3],set())
>>> d
>>> {1: set(), 2: set(), 3: set()}
>>> d[1].add('a')
>>> d
>>> {1: {'a'}, 2: {'a'}, 3: {'a'}}
似乎字典的所有三个值都指的是同一个集合。我想将字典的所有值初始化为空集,以便我可以在以后基于键的循环中对这些集执行某些操作。
答案 0 :(得分:7)
答案 1 :(得分:2)
>>> from collections import defaultdict
>>> d = defaultdict(set)
>>> d[1].add('a')
>>> d
defaultdict(<class 'set'>, {1: {'a'}})
>>> d[2].add('b')
>>> d
defaultdict(<class 'set'>, {1: {'a'}, 2: {'b'}})
它的工作方式是,当您尝试向dict[key].add(value)
之类的键添加值时,它会检查密钥是否存在;如果是这样,那么它将值添加到集合中。如果不存在,则该值将添加为set
,因为默认设置为set
(defaultdict(set)
)。
答案 2 :(得分:1)
您想要defaultdict
,因此您不需要首先初始化集:
>>> from collections import defaultdict
>>> d = defaultdict(set)
# That's it, initialization complete. Use goes like this:
>>> d[1].add('a')
>>> d[2].add('b')
>>> d[3].add('c')
>>> d
defaultdict(<class 'set'>, {1: {'a'}, 2: {'b'}, 3: {'c'}})