Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果dict().fromkeys()都指向同一个对象,那么默认值参数的作用是什么?_Python_Dictionary - Fatal编程技术网

Python 如果dict().fromkeys()都指向同一个对象,那么默认值参数的作用是什么?

Python 如果dict().fromkeys()都指向同一个对象,那么默认值参数的作用是什么?,python,dictionary,Python,Dictionary,dict方法{}.fromkeys()接受一个字符串的iterable,它将被转换为字典键。默认值将默认为None。例如: d = {}.fromkeys(['loss', 'val_loss']) 第二个可选参数是所有这些值将采用的默认值: d = {}.fromkeys(['loss', 'val_loss'], []) 我知道你可以像这样初始化一个空的dict。更复杂的是,默认值指向同一对象 [id(val) for val in d.values()] 如果要附加一个列表,它将附加

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

d = {}.fromkeys(['loss', 'val_loss'])
第二个可选参数是所有这些值将采用的默认值:

d = {}.fromkeys(['loss', 'val_loss'], [])
我知道你可以像这样初始化一个空的dict。更复杂的是,默认值指向同一对象

[id(val) for val in d.values()]
如果要附加一个列表,它将附加此dict的所有值。因此,需要将这些值重新分配给新对象,以便将dict值视为单独的对象:

d['loss'] = list([0.2, 0.4])
如果不这样做,将同时更改所有dict值

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

在我看来,您无论如何都需要重新指定这个默认值,除非您想用不同的dict键操作同一个对象。我想不出一个诚实的理由让一个对象有多个dict键。

这可以奏效(字典理解)


可选默认值的目的是作为默认值,而不是您观察到的
None
。只有当它是可变对象(如列表或字典)时,每个键都是相同的对象才有问题。如果要查找不存在的键时使用列表或字典作为默认值的字典,则应使用
defaultdict
。这是否回答了您的问题?或者我知道如何使用
defaultdict
,这不是我想要的是一个返回新字典的类方法。value默认为None。所有的值都只引用一个实例,因此value作为一个可变对象(如空列表)通常没有意义。要获得不同的值,请使用dict理解。“谢谢你的回答,但我的问题不是“还有什么可以工作”,我知道如何使用听写理解。
[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)