给出具有以下格式的字典:
dict_list = {key0: [list0,list1], key1: [list0,list1], ...}
我目前正在通过以下方式更新dict_list
:
for key in list_of_possibly_new_keys:
if key not in dict_list.keys():
dict_list[key] = [list0, list1]
else:
dict_list[key][0].extend(list0)
dict_list[key][1].extend(list1)
有没有办法使用本机构造缩短此代码(即没有其他方法)?我越来越多地在我的代码中遇到这种“设置或更新”模式的数据,并想知道是否有更简洁的方法来执行此操作。
UPDATE /澄清:
dict_list的实际内容示例:
dict_list = {'John Solver': [['05/10/2013','05/14/2013','05/22/2013'],[20.33,40.12,10.13]]}
花车可以用美元代表John Solver的日常开支。
如果可能,我们希望继续使用两个长列表而不是许多日期 - 费用对,因为我们希望使用sum方便地执行一笔费用操作(dict_list ['John Solver'] [1] )。
答案 0 :(得分:7)
除非这是家庭作业,为什么你不能在这里使用defaultdict
?
from collections import defaultdict
dict_list = defaultdict(list)
for key in list_of_possibly_new_keys:
dict_list[key] += [list0, list1]
针对您的示例进行了更新:
>>> from collections import defaultdict
>>> dict_list = defaultdict(lambda :[[], []])
>>> dict_list['John Solver'][0].append('05/10/2013')
>>> dict_list['John Solver'][1].append(20.33)
and so on
除此之外:由于浮标的精度有限,使用它们代表货币通常是一个糟糕的主意。请考虑使用decimal
模块
答案 1 :(得分:6)
您可以使用dict.setdefault
:
for key in list_of_possibly_new_keys:
dict_list.setdefault(key,[]).extend([list0, list1])
dict.setdefault
中的帮助:
>>> dict.setdefault?
Type: method_descriptor
String Form:<method 'setdefault' of 'dict' objects>
Namespace: Python builtin
Docstring: D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D