Python Dictionary fromkeys()
2018-10-11 本文已影响11人
庵下桃花仙
描述
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
语法
dict.fromkeys(seq[, value])
参数
seq -- 字典键值列表。
value -- 可选参数, 设置键序列(seq)的值。
返回值
该方法返回一个新字典。
Example 1: Create a dictionary from a sequence of keys
# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
vowels = dict.fromkeys(keys)
print(vowels)
{'i': None, 'a': None, 'u': None, 'o': None, 'e': None}
Example 2: Create a dictionary from a sequence of keys with value
# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = 'vowel'
vowels = dict.fromkeys(keys, value)
print(vowels)
{'o': 'vowel', 'u': 'vowel', 'i': 'vowel', 'e': 'vowel', 'a': 'vowel'}
Example 3: Create a dictionary from mutable object list
# 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)
{'u': [1], 'o': [1], 'a': [1], 'e': [1], 'i': [1]}
{'a': [1, 2], 'u': [1, 2], 'o': [1, 2], 'e': [1, 2], 'i': [1, 2]}
如果提供的值是一个可变对象(其值可以被修改),比如list、dictionary等,那么当可变对象被修改时,序列中的每个元素也会被更新。
这是因为,每个元素都被分配到同一个对象的引用(指向内存中的同一个对象)。
To avoid this issue, we use dictionary comprehension.
# 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]}
在这里,对于键中的每个键,将创建一个value的新列表并将其分配给它。
本质上,值不会被赋值给元素,但会从中创建一个新列表,然后将其分配给字典中的每个元素。