📜  Python字典fromkeys()

📅  最后修改于: 2020-09-20 04:42:32             🧑  作者: Mango

fromkeys()方法根据给定的元素序列创建一个新字典,该字典具有用户提供的值。

fromkeys()方法的语法为:

dictionary.fromkeys(sequence[, value])

fromkeys()参数

fromkeys()方法采用两个参数:

  1. sequence-元素序列,用作新字典的键
  2. value(可选)-为字典的每个元素设置的值

从fromkeys()返回值

fromkeys()方法返回一个新字典,该字典具有给定的元素序列作为字典的键。

如果设置了value参数,那么新创建的字典的每个元素都将设置为提供的值。

示例1:根据键序列创建字典

# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }

vowels = dict.fromkeys(keys)
print(vowels)

输出

{'a': None, 'u': None, 'o': None, 'e': None, 'i': None}

示例2:根据具有值的键序列创建字典

# vowels keys
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'}

示例3:从可变对象列表创建字典

# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = [1]

vowels = dict.fromkeys(keys, value)
print(vowels)

# updating the 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]}

如果value是一个可变对象(可以修改其值),例如列表,字典等,则当修改该可变对象时,序列中的每个元素也会更新。

这是因为为每个元素分配了对同一对象的引用(指向内存中的同一对象)。

为避免此问题,我们使用字典理解。

# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = [1]

vowels = { key : list(value) for key in keys }
# you can also use { key : value[:] for key in keys }
print(vowels)

# updating the value
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不是分配给元素,而是从中创建一个新列表,然后将其分配给字典中的每个元素。