Python 如果dict().fromkeys()都指向同一个对象,那么默认值参数的作用是什么?
dict方法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()] 如果要附加一个列表,它将附加
{}.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)