Python 字典 fromkeys()

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)

这里,alphabetsnumbers 是字典的键和值。


fromkeys() 参数

fromkeys() 方法可以接受两个参数

  • alphabets - 键,可以是任何可迭代对象,如字符串集合列表等。
  • numbers (可选) - 值,可以是任何类型或任何可迭代对象,如字符串、集合、列表等。

注意: 相同的值被分配给字典的所有键。


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() 方法从 keysvalue 创建了一个名为 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 列表。新创建的列表被分配给字典中的每个键。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战