摘要: 最Pythonic的方法是使用dict.fromkeys(key, None) dictionary方法来初始化一个带键的字典,该方法接受给定列表中的每个项目作为一个键,并将None与每个键关联起来作为一个值。
问题的提出。给 出一个包含雇员 ID 的列表,作为其中的项目。你如何用给定列表中的项目(雇员编号)作为键来创建一个只有键的**字典**?
例子。
Given list:
我们不再耽搁时间,让我们深入探讨解决这个关键问题的众多方法。
方法1:基本方法
方法。使 用for循环,逐一遍历给定列表中的每个元素。在每次迭代中,将None 作为键的值,使键代表给定列表中的每个元素。
代码。
# list of employee IDs --> keys
emp_id = [10946, 20480, 30856]
record = {}
# iterate through list and assign None Values to the keys
for i in emp_id:
record[i] = None
# display dictionary
print(record)
输出。
{10946: None, 20480: None, 30856: None}
方法2:使用fromkeys的Pythonic解决方案
解决给定问题的最好和最Pythonic的方法是使用字典方法 fromkeys 将列表中的键分配到字典中。
fromkeys() 是一个字典方法,根据指定的键和作为参数在其中传递的值返回一个字典。
语法。 dict.fromkeys(keys, value)
keys 是一个必需的参数,表示一个包含新的 dictionary 的 key 的 iterable。
value 是一个可选的参数,表示新 dictionary 中所有 key 的值。默认情况下,它是 。None
例子。 下面的代码片段揭示了我们如何用一个元组的键来初始化一个 dictionary,并将0 作为每个键的值。
k = ('key_1', 'key_2', 'key_3')
my_dictionary = dict.fromkeys(k, 0)
print(my_dictionary)
# OUTPUT: {'key_1': 0, 'key_2': 0, 'key_3': 0}
解决方案。 现在让我们深入研究给定问题的解决方案,直观地了解如何使用fromkeys() 函数来初始化一个只有键的 dictionary。
# list of employee IDs --> keys
emp_id = [10946, 20480, 30856]
# Using fromkeys
record = dict.fromkeys(emp_id, None)
# display dictionary
print(record)
输出。
{10946: None, 20480: None, 30856: None}
#Note: 即使你没有指定值为None; 默认情况下,它将被视为None 。
方法3:使用字典的理解力
另一个用键初始化 dictionary 的解决方法是简单地使用 dictionary comprehension。在我们深入研究这个解决方案之前,让我们快速回顾一下什么是字典理解。
字典理解是在一行 Python 代码中创建和初始化字典的一种简明和节省内存的方法。它由两部分组成:表达式和上下文。表达式 定义了如何将键映射到值。上下文 使用单行 for 循环在一个迭代器上循环,并定义哪些 (key, value) 对要包含在新的字典中。
视频教程。
方法。我 们的想法是使用一个 dictionary comprehension,这样表达式就代表了要插入 dictionary 中的 key-value 对。
- 这里,表达式是key。None,其中key代表给定列表中的每个项目,作为字典的键,而None是与每个键相关的值。
- 上下文变量key代表给定列表emp_id中的每一项,这样,通过遍历给定列表中的所有元素,就可以获得每一项作为字典的键。
代码。
# list of employee IDs --> keys
emp_id = [10946, 20480, 30856]
# Using fromkeys
record = {key: None for key in emp_id }
# display dictionary
print(record)
输出。
{10946: None, 20480: None, 30856: None}
方法4:使用zip
方法。调 用zip(emp_id, [None]*len(emp_id)) 方法来创建一个zip对象。这个zip对象将使用下面的迭代表来创建。
- Iterable 1代表给定的列表emp_id,即。
[10946, 20480, 30856] - 迭代表2表示一个以None为项目的列表,这样列表中的项目/None值的数量将等于列表的长度,即。
[None, None, None]
因此,当你压缩这两个迭代表时,它将通过合并每个迭代表的第i个来创建一个压缩对象。这意味着给定列表中的每个项目将被映射到第二个迭代器中的 None 值。最后,为了从这个 zip 对象中得到一个字典,你必须使用dict 构造函数把它转换为一个字典。
代码。
# list of employee IDs --> keys
emp_id = [10946, 20480, 30856]
# Using zip
record = dict(zip(emp_id, [None]*len(emp_id)))
# display dictionary
print(record)
输出。
{10946: None, 20480: None, 30856: None}
快速回顾一下zip。 zip() 函数接收任意数量的可迭代数据,并将它们聚合为一个单一的可迭代数据,即zip对象。它将每个迭代器参数的第i个值合并为一个元组。因此,如果你传递两个迭代器,每个元组将包含两个值。如果你传递三个迭代器,每个元组将包含三个值。例如,将列表[1, 2, 3] 和[4, 5, 6] 压缩成[(1,4), (2,5), (3,6)] 。
结论
好了!我们在这篇文章中发掘了四种在 Python 中初始化只有键的字典的不同方法。总结一下,最Pythonic的方法是使用dict.fromkeys 函数。然而,请随意使用上述任何一种适合你的要求的方法。