在Python中操作字典之fromkeys()方法的使用

  • Post category:Python

当我们需要创建一个字典,且字典中的所有键都需要对应同一个初始的值时,我们可以使用Python中字典类的fromkeys()方法来实现。

语法和参数

fromkeys()方法的语法如下:

dict.fromkeys(seq[, value])

其中seq为需要作为字典键的序列,value为给所有键初始赋的值,如果省略则默认为None

示例说明

示例1:创建一个空字典,并为所有键赋初值0

result_dict = dict.fromkeys(['a', 'b', 'c'], 0)
print(result_dict)

运行结果如下:

{'a': 0, 'b': 0, 'c': 0}

在上述示例中,我们将['a', 'b', 'c']作为字典的键序列,然后为所有键赋初始值0,最终得到了一个字典{'a': 0, 'b': 0, 'c': 0}

示例2:创建一个空字典,并为所有键赋初值为一个列表

result_dict = dict.fromkeys(['a', 'b', 'c'], [])
result_dict['a'].append(1)
print(result_dict)

运行结果如下:

{'a': [1], 'b': [1], 'c': [1]}

在上述示例中,我们将['a', 'b', 'c']作为字典的键序列,然后为所有键赋初始值为一个空列表[],最终得到了一个字典{'a': [], 'b': [], 'c': []}。接着我们对字典中某个键对应的列表进行了添加操作,结果会发现所有键都对应的列表进行了相同的添加操作。

这是因为,在Python中,赋值语句默认情况下只是让左边的变量指向右边的对象,而并没有创建新对象,因此在上述示例中,所有键共享一个列表对象。为了解决这个问题,我们可以对上述代码进行修改:

result_dict = dict.fromkeys(['a', 'b', 'c'], [])
result_dict['a'] = [1]
print(result_dict)

运行结果如下:

{'a': [1], 'b': [], 'c': []}

现在只有'a'对应的列表中添加了1,而其他键对应的列表依旧为空。