📅  最后修改于: 2020-07-22 04:32:16             🧑  作者: Mango
有时需要根据给定的键生成字典。蛮力地执行它会花费时间,并且会变得更加乏味。因此,fromkeys()可以帮助我们轻松地并且仅使用一种方法即可完成此任务。本文介绍了与此功能相关的工作和其他方面。
语法: fromkeys(seq, val)
参数:
seq:要转换为字典的序列。
val:需要分配给生成的键的初始值。默认为无。
返回:如果没有提供值,则字典的键映射为None,否则为字段中提供的值。
代码1:演示fromkeys()的工作方式
# Python 3代码演示fromkeys()的工作方式
# 初始化序列
seq = { 'a', 'b', 'c', 'd', 'e' }
# 使用fromkeys()将序列转换为字典,使用无初始化
res_dict = dict.fromkeys(seq)
# 打印创建字典
print ("新创建的无值字典 : " + str(res_dict))
# 使用fromkeys()将序列转换为字典以1初始化
res_dict2 = dict.fromkeys(seq, 1)
# 打印创建字典
print ("新创建的字典,其值为1 : " + str(res_dict2))
输出:
新创建的无值字典 : {‘d’: None, ‘a’: None, ‘b’: None, ‘c’: None, ‘e’: None}
新创建的字典,其值为1 : {‘d’: 1, ‘a’: 1, ‘b’: 1, ‘c’: 1, ‘e’: 1}
fromdict()的行为,以Mutable对象作为值:
fromdict()也可以提供可可变对象作为默认值。但是在这种情况下,将由字典构成一个深层副本,即,如果我们在原始列表中附加值,则附加会发生在键的所有值中。
预防措施:某些字典理解技术可用于创建新列表作为键值,而不将原始列表指向键值。
代码2:演示可变对象的行为。
# Python 3代码演示可变对象的行为
# 初始化顺序和清单
seq = { 'a', 'b', 'c', 'd', 'e' }
lis1 = [ 2, 3 ]
# 使用fromkeys()使用常规方法将序列转换为dict
res_dict = dict.fromkeys(seq, lis1)
# 打印创建字典
print ("新创建的具有列表值的字典 : "
+ str(res_dict))
# 附加到lis1
lis1.append(4)
# 追加后打印字典。注意,append发生在所有值中
print ("追加后具有列表值的字典 : "
+ str(res_dict))
lis1 = [ 2, 3 ]
print ('\n')
# 使用fromkeys()使用dict将序列转换为dict
res_dict2 = { key : list(lis1) for key in seq }
# 打印创建字典
print ("新创建的具有列表值的字典 : "
+ str(res_dict2))
# 附加到lis1
lis1.append(4)
# 追加后打印dict注意现在不进行追加.
print ("追加后具有列表值的字典 (no change) : "
+ str(res_dict2))
输出:
新创建的具有列表值的字典 : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}
追加后具有列表值的字典 : {‘d’: [2, 3, 4], ‘e’: [2, 3, 4], ‘c’: [2, 3, 4], ‘a’: [2, 3, 4], ‘b’: [2, 3, 4]}
新创建的具有列表值的字典 : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}
追加后具有列表值的字典 (no change) : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}