如何在python3.6中将键和值列表初始化为空集的字典?

时间:2018-03-19 08:55:33

标签: python python-3.x

我尝试使用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'}}

似乎字典的所有三个值都指的是同一个集合。我想将字典的所有值初始化为空集,以便我可以在以后基于键的循环中对这些集执行某些操作。

3 个答案:

答案 0 :(得分:7)

使用字典理解

d = {x: set() for x in [1, 2, 3]}

或使用collections.defaultdict

答案 1 :(得分:2)

您可以使用collections.defaultdict

>>> 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,因为默认设置为setdefaultdict(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'}})
相关问题