Python dict如何在一行中创建键或更新键?

Python dict如何在一行中创建键或更新键?,python,dictionary,Python,Dictionary,我的问题类似于 我想创建以下词典词典: my_dict = { "name1" : { "id1" : "pin1", "id2" : "pin2" }, "name2" : { "id3" : "pin3", "id4" : "pin4" } } 我目前使用以下方法完成此任务: if name in my_dict: my_dict[name].update({ id : pin } else: my_dict[name] = { id : pin } 有没有办法使用

我的问题类似于

我想创建以下词典词典:

my_dict = {
 "name1" : { "id1" : "pin1", "id2" : "pin2" },
 "name2" : { "id3" : "pin3", "id4" : "pin4" }
}
我目前使用以下方法完成此任务:

if name in my_dict:
    my_dict[name].update({ id : pin }
else:
    my_dict[name] = { id : pin }
有没有办法使用dict.setdefault实现这一点?

您可以使用

然后您不需要if语句,您可以直接调用update,如果该名称还没有dict,那么在调用update之前将创建一个新的dict

有没有办法使用dict.setdefault来实现这一点

当然!setdefault没有什么神奇之处;如果存在,它只返回my_dict[name],或者设置my_dict[name]=default,如果不存在,则返回default

无论哪种方式,它返回的都是my_dict[name]中潜在的新dict,因此您所要做的就是更新它:

my_dict.setdefault(name, {})[id] = pin
或者,如果您真的喜欢使用update而不仅仅是[]=:

例如:

>>> my_dict.setdefault('name1', {})['id10']= 'pin10'
>>> my_dict.setdefault('name3', {})['id20']= 'pin20'
{'name1': {'id1': 'pin1', 'id10': 'pin10', 'id2': 'pin2'},
 'name2': {'id3': 'pin3', 'id4': 'pin4'},
 'name3': {'id20': 'pin20'}}
更一般地说,您可以将现有代码改写为:

if name not in my_dict:
    my_dict[name] = {}
my_dict[name].update({ id : pin }
无论何时您可以这样做,都可以使用setdefault。但请注意,我们在这里调用了一个变异方法或分配给my_dict[name]的键/索引/成员,而不仅仅是给my_dict[name]分配一个新值。这是它有用的关键


当然,几乎任何时候都可以使用setdefault,反之亦然。如果您希望始终使用默认行为,请使用defaultdict。仅当您希望仅此一次默认行为时才使用setdefault。例如,您希望在构建dict时进行默认,但希望在以后使用它时出现KeyErrors。

以上代码片段应显示if name not in my_dict:@crusarovid谢谢;固定的
>>> my_dict.setdefault('name1', {})['id10']= 'pin10'
>>> my_dict.setdefault('name3', {})['id20']= 'pin20'
{'name1': {'id1': 'pin1', 'id10': 'pin10', 'id2': 'pin2'},
 'name2': {'id3': 'pin3', 'id4': 'pin4'},
 'name3': {'id20': 'pin20'}}
if name not in my_dict:
    my_dict[name] = {}
my_dict[name].update({ id : pin }