python - 如果 dict().fromkeys() 都指向同一个对象,那么默认值参数有什么用呢?

标签 python dictionary

dict 方法 {}.fromkeys() 接受一个可迭代的字符串,它将被转换为字典键。默认值将默认为 None。例如:

d = {}.fromkeys(['loss', 'val_loss'])
{'loss': None, 'val_loss': None}

可选的第二个参数是所有这些值将采用的默认值:

d = {}.fromkeys(['loss', 'val_loss'], [])
{'loss': [], 'val_loss': []}

我知道你可以像这样初始化一个空的字典。变得更复杂的是默认值指向同一个对象

[id(val) for val in d.values()]
[140711273848032, 140711273848032]

如果你要追加一个列表,它会追加这个字典的所有值。因此,您需要将值重新分配给新对象,以便将字典值视为单独的对象:

d['loss'] = list([0.2, 0.4])

如果不这样做,您将同时更改所有字典值。

我的问题:可选默认值的用途是什么?

如我所见,无论如何你都需要重新分配这个默认值,除非你想用不同的字典键操作同一个对象。我想不出一个诚实的理由为一个对象设置多个字典键。

最佳答案

这可以工作(字典理解)

keys = {'A', 'B', 'C'}
int_lst = [9]
a_dict = { key : list(int_lst) for key in keys }
print(a_dict)
a_dict['B'].append(12)
print(a_dict)

关于python - 如果 dict().fromkeys() 都指向同一个对象,那么默认值参数有什么用呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62152939/

相关文章:

python - 通过单击面向对象的 PyGame 按钮来调用 PyGame 函数

python - 将字典展开到 DataFrame 中,然后添加到原始 DataFrame 中,并添加新列和复制的原始数据

python - pandas 时间间隔到时间序列

python - 根据条件从现有 token 和元组创建新 token 和元组

python - 从Python代码中获取列表索引超出范围

python - Python 脚本中的关键错误

python - 使用 BeautifulSoup 迭代列表

python - python字典中的多个赋值

python 3 : Conditional extraction of keys from a dictionary with comprehension

python - 给定两个列表、单词和定义。我们需要创建一个名为 Cooldictionary 的字典,其中我们使用单词作为键,使用定义作为值