fromkeys()方法根据给定的元素序列创建一个新字典,该字典具有用户提供的值。
fromkeys()方法的语法为:
dictionary.fromkeys(sequence[, value])
fromkeys()方法采用两个参数:
sequence -用作新字典键的元素序列
value(可选) -为字典的每个元素设置的值
fromkeys()方法返回一个新字典,该字典具有给定的元素序列作为字典的键。
如果设置了value参数,则新创建的字典的每个元素都将设置为提供的value值。
# 元音键 keys = {'a', 'e', 'i', 'o', 'u' } vowels = dict.fromkeys(keys) print(vowels)
运行该程序时,输出为:
{'a': None, 'u': None, 'o': None, 'e': None, 'i': None}
# 元音键 keys = {'a', 'e', 'i', 'o', 'u' } value = 'vowel' vowels = dict.fromkeys(keys, value) print(vowels)
运行该程序时,输出为:
{'a': 'vowel', 'u': 'vowel', 'o': 'vowel', 'e': 'vowel', 'i': 'vowel'}
# 元音键 keys = {'a', 'e', 'i', 'o', 'u' } value = [1] vowels = dict.fromkeys(keys, value) print(vowels) # 更新的值 value.append(2) print(vowels)
运行该程序时,输出为:
{'a': [1], 'u': [1], 'o': [1], 'e': [1], 'i': [1]} {'a': [1, 2], 'u': [1, 2], 'o': [1, 2], 'e': [1, 2], 'i': [1, 2]}
如果提供的value是可变对象(可以更改其值),如list,dictionary等,则当修改可变对象时,序列中的每个元素也会更新。
这是因为,为每个元素分配了对同一对象的引用(指向内存中的同一对象)。
为避免此问题,我们使用字典理解。
# 元音键 keys = {'a', 'e', 'i', 'o', 'u' } value = [1] vowels = { key : list(value) for key in keys } # 你也可以使用 { key : value[:] for key in keys } print(vowels) # 更新的值 value.append(2) print(vowels)
运行该程序时,输出为:
{'a': [1], 'u': [1], 'o': [1], 'e': [1], 'i': [1]} {'a': [1], 'u': [1], 'o': [1], 'e': [1], 'i': [1]}
在此,对于keys中的每个键,将创建一个新列表从value,并将其分配给它。
本质上,value不是分配给元素,而是从中创建一个新列表,然后将其分配给字典中的每个元素。