我的问题类似于 Python dict how to create key or append an element to key?
我想创建以下词典词典:
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()做到这一点?
答案 0 :(得分:5)
有没有办法用dict.setdefault()做到这一点?
当然! setdefault
没有什么神奇之处;它只返回my_dict[name]
(如果存在),或设置my_dict[name] = default
并返回default
,如果不存在。
无论哪种方式,它返回的是my_dict[name]
中的(可能是新的)词典,所以你要做的就是更新它:
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]
的键/索引/成员,而不只是为{分配新值{1}}。这是它有用的关键。)
当然,几乎任何时候你都可以使用my_dict[name]
,你也可以use defaultdict
(as demonstrated in CoryKramer's answer)(反之亦然)。如果您希望始终使用默认行为,请使用setdefault
。如果您只想使用默认行为,只需使用defaultdict
(例如,您在构建字典时需要默认,但在使用它时需要setdefault
。)< / p>
答案 1 :(得分:3)
>>> 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
,如果dict
尚未name
,则会创建一个新update
在致电import openpyxl
from openpyxl.styles import Font
wb = openpyxl.Workbook()
sheet = wb.get_sheet_by_name('Sheet')
italic24Font = Font(size=24, italic=True)
sheet['A1'].font = italic24Font
sheet['A1'] = 'Hello world!'
wb.save('styled.xlsx')