簡體   English   中英

Python dict如何在一行中創建密鑰或更新密鑰?

[英]Python dict how to create key or update key in one line?

我的問題類似於Python dict如何創建密鑰或向密鑰添加元素?

我想創建以下字典詞典:

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()嗎?

有辦法使用dict.setdefault()嗎?

當然! setdefault沒有什么魔力; 它僅返回my_dict[name]如果存在),或者將my_dict[name] = default設置my_dict[name] = default default否則返回default

無論哪種方式,它返回的都是my_dict[name]的(可能是新的)dict,因此您要做的就是更新它:

my_dict.setdefault(name, {})[id] = pin

或者,如果您真的很喜歡使用update而不是[] =

my_dict.setdefault(name, {}).update({id: pin})

例如:

>>> 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 (如CoryKramer的答案所示) (反之亦然)。 如果你想違約行為, 所有的時間 ,使用defaultdict 僅在需要一次默認行為的情況下才使用setdefault (例如,要在構建dict時進行默認設置,但是稍后要使用KeyError時)。

您可以使用collections.defaultdict

>>> from collections import defaultdict
>>> my_dict = defaultdict(dict)
>>> my_dict
defaultdict(<class 'dict'>, {})
>>> my_dict['name1'].update({'id1': 'pin1'})
>>> my_dict
defaultdict(<class 'dict'>, {'name1': {'id1': 'pin1'}})

然后,您不需要if語句,可以直接調用update ,如果該name尚無dict ,則在調用update之前將創建一個新的dict

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM