![](/img/trans.png)
[英]how to sort list of dict by dict[key][key] in one line(Python3)
[英]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
時)。
>>> 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.