如何在Python中用列表中的键初始化一个空值的字典?

372 投票
7 回答
489269 浏览
提问于 2025-04-15 19:08

我想把这个:

keys = [1,2,3]

变成这个:

{1: None, 2: None, 3: None}

有没有什么更优雅的Python方法来实现呢?

这是一个比较笨的方法:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

7 个回答

83

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序里使用它。这就像你从冰箱里拿出食材,然后在厨房里做饭一样。

有些时候,我们会遇到一些问题,比如数据格式不对,或者程序运行的时候出错。这就像你在做饭的时候发现缺少某种调料,或者锅里的火太大了,导致菜烧焦。

为了避免这些问题,我们可以提前检查数据,确保它们是正确的。就像在做饭之前,先把所有的食材准备好,确保没有遗漏。

总之,编程就像做饭,需要细心和耐心,确保每一步都做好,这样才能做出美味的菜肴。

dict.fromkeys(keys, None)
361

使用一种叫做 字典推导式 的方法:

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

在这个过程中,值的表达式会每次都被计算,所以你可以用它来创建一个字典,字典里的值可以是不同的列表(比如说):

>>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}
557

dict.fromkeys 直接解决了这个问题:

>>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}

其实这是一个类方法,所以它也适用于字典的子类(比如 collections.defaultdict)。

第二个可选参数,默认是 None,用来指定键的值。需要注意的是,同一个对象会被用作每个键的值,这可能会导致一些问题,特别是当值是可变的情况下:

>>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}

如果这样不行,可以看看 如何初始化一个字典,使得它的值是不同的空列表? 以找到解决方法。

撰写回答