如何在Python中用列表中的键初始化一个空值的字典?
我想把这个:
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']}
如果这样不行,可以看看 如何初始化一个字典,使得它的值是不同的空列表? 以找到解决方法。