fromkeys()
方法根据给定的键和值序列创建一个字典。
示例
# keys for the dictionary
alphabets = {'a', 'b', 'c'}
# value for the dictionary
number = 1
# creates a dictionary with keys and values
dictionary = dict.fromkeys(alphabets, number)
print(dictionary)
# Output: {'a': 1, 'c': 1, 'b': 1}
fromkeys() 语法
fromkeys()
方法的语法是
dict.fromkeys(alphabets,number)
这里,alphabets 和 numbers 是字典的键和值。
fromkeys() 参数
fromkeys()
方法可以接受两个参数
注意: 相同的值被分配给字典的所有键。
fromkeys() 返回值
fromkeys()
方法返回
- 一个新字典,包含给定的键和值序列
注意: 如果未提供字典的值,则将 None
分配给键。
示例 1:Python 字典 fromkeys() 带键和值
# set of vowels
keys = {'a', 'e', 'i', 'o', 'u' }
# assign string to the value
value = 'vowel'
# creates a dictionary with keys and values
vowels = dict.fromkeys(keys, value)
print(vowels)
输出
{'a': 'vowel', 'u': 'vowel', 'e': 'vowel', 'i': 'vowel', 'o': 'vowel'}
在上面的示例中,我们使用了 fromkeys()
方法来创建包含给定 keys 集合和字符串 value 的字典。
在这里,fromkeys()
方法从 keys 和 value 创建了一个名为 vowels 的新字典。字典的所有键都分配了相同的值。
示例 2:fromkeys() 不带值
# list of numbers
keys = [1, 2, 4 ]
# creates a dictionary with keys only
numbers = dict.fromkeys(keys)
print(numbers)
输出
{1: None, 2: None, 4: None}
在上面的示例中,我们创建了一个名为 numbers
的字典,其中包含给定的 keys 列表。
我们没有提供任何值,因此所有键默认都被分配了 None
。
示例 3:fromkeys() 从可变对象创建字典
# set of vowels
keys = {'a', 'e', 'i', 'o', 'u' }
# list of number
value = [1]
vowels = dict.fromkeys(keys, value)
print(vowels)
# updates the list value
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]}
在上面的示例中,我们使用列表作为字典的值。列表、字典等可迭代对象是可变对象,这意味着它们可以被修改。
这里,当我们使用 append 更新列表值时,键被分配了新的更新值。这是因为每个元素都指向内存中的相同地址。
为了解决这个问题,我们可以使用字典推导式。
可变对象的字典推导式
我们可以使用字典推导式并防止在可变对象(列表、字典等)更新时更新字典。例如,
# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = [1]
# creates dictionary using dictionary comprehension
vowels = { key : list(value) for key in keys }
print(vowels)
# updates the value list
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]}
在上面的示例中,我们使用字典推导式创建了一个名为 vowels 的字典。
在这里,值没有分配给字典的键。但是,对于 keys 中的每个键,都会创建一个新的 value 列表。新创建的列表被分配给字典中的每个键。
另请阅读