Python中提供了一个快速生成字典的方法,就是使用dict.fromkeys()函数,下面我将详细讲解该方法的用法及其示例。
基本用法
dict.fromkeys()方法用于创建一个新字典,该字典的键为可迭代对象中的每个元素,键对应的初始值可以通过指定一个默认值进行设置。该方法的基本语法格式如下:
dict.fromkeys(iterable[, value])
其中,iterable参数为可迭代对象,value参数为可选参数,表示字典中所有键所对应的初始值。如果不指定value参数,则键对应的初始值为None。
下面是一个基本示例:
keys_list = ['a', 'b', 'c']
new_dict = dict.fromkeys(keys_list)
print(new_dict) # {'a': None, 'b': None, 'c': None}
以上代码创建了一个包含3个元素的列表keys_list,然后通过dict.fromkeys()方法创建了一个新的字典new_dict,并将keys_list中的每个元素作为新字典的键,由于未指定value参数,因此新字典new_dict中所有键对应的初始值均为None。
设置初始值
我们可以通过指定value参数来设置字典中所有键所对应的初始值,如下所示:
keys_list = ['a', 'b', 'c']
new_dict = dict.fromkeys(keys_list, 0)
print(new_dict) # {'a': 0, 'b': 0, 'c': 0}
以上代码与前面的示例相似,但在创建新字典的过程中,除了提供可迭代对象keys_list外,还指定了一个初始值0,因此新字典new_dict的所有键所对应的初始值为0。
示例说明
下面再来看两个示例说明,以便更好地理解dict.fromkeys()方法。
示例1:创建一个字典,包含数字0~9对应的初始值
keys_tuple = tuple(range(10))
values_list = [0] * 10
new_dict = dict.fromkeys(keys_tuple, values_list)
print(new_dict)
以上代码创建了一个包含数字0~9的元组keys_tuple以及一个长度为10,元素均为0的列表values_list。然后调用dict.fromkeys()方法创建了一个新字典new_dict,将keys_tuple作为新字典的键,将values_list作为所有键对应的初始值。由于values_list是一个可变对象,因此对新字典中任意一个元素进行修改,都将引起values_list的变化,例如:
new_dict[0][0] = 1
print(new_dict) # {0: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 2: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 3: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 4: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 5: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 6: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 7: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 8: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 9: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
由于new_dict中所有键所对应的值均为同一个可变对象values_list,因此修改任意一个键所对应的值,都将导致所有键所对应的值的变化。
示例2:创建一个字典,包含5个字符串键及其对应的初始值
keys_list = ['key1', 'key2', 'key3', 'key4', 'key5']
values_dict = {'language':'Python', 'author':'Jack', 'version':'3.8'}
new_dict = dict.fromkeys(keys_list, values_dict)
print(new_dict)
以上代码创建了一个包含5个字符串键的列表keys_list,以及一个包含3个键值对的字典values_dict。然后调用dict.fromkeys()方法创建了一个新字典new_dict,该字典的所有键均为keys_list中的元素,键对应的初始值为values_dict。由于values_dict是一个不可变对象(字典),因此修改new_dict中任意一个键所对应的值,都将不会影响其他键所对应的值。
总结
通过dict.fromkeys()方法可以快速创建一个新字典,并设置其中所有键的初始值。此外,需要注意的是,如果指定的初始值是一个可变对象,则对新字典中任意一个键对应的值进行修改,都将引起该可变对象的变化。