fromkeys()方法根據(jù)給定的元素序列創(chuàng)建一個新字典,該字典具有用戶提供的值。
fromkeys()方法的語法為:
dictionary.fromkeys(sequence[, value])
fromkeys()方法采用兩個參數(shù):
sequence -用作新字典鍵的元素序列
value(可選) -為字典的每個元素設(shè)置的值
fromkeys()方法返回一個新字典,該字典具有給定的元素序列作為字典的鍵。
如果設(shè)置了value參數(shù),則新創(chuàng)建的字典的每個元素都將設(shè)置為提供的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等,則當修改可變對象時,序列中的每個元素也會更新。
這是因為,為每個元素分配了對同一對象的引用(指向內(nèi)存中的同一對象)。
為避免此問題,我們使用字典理解。
# 元音鍵 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中的每個鍵,將創(chuàng)建一個新列表從value,并將其分配給它。
本質(zhì)上,value不是分配給元素,而是從中創(chuàng)建一個新列表,然后將其分配給字典中的每個元素。