我想知道如果密钥存在,是否有更有效的方法来附加dict值,或者如果没有则创建一个。目前,我使用“org.springframework.boot.autoconfigure.EnableAutoConfiguration=my package.tracking.TrackerConfig
”
我阅读了许多谈论if key in set(dict.keys())
的主题,但它是否有效?我的意思是,当你使用collections.defaultdict
时,python是否会生成“if key in ...”或者它的工作方式是否有所不同?
我的问题是我的字数越来越大,所以我的collections.defaultdict
每次执行的时间越来越长
以下是我所谈论的一个例子:
if key in set(dict.keys())
更准确地说,这个脚本用于处理Google AnalyticsAPI,以避免采样(因此我会对一个月中的每一天发出请求,因此我的网址(mydict键)很可能是相同的我要求的每一天。
答案 0 :(得分:1)
如果你不想知道词典中是否存在键,你可以使用列表或任何其他数据类型来使用python词典。
In [26]: for i in a_list:
...: my_dict.setdefault(i[0], {'session':0, 'transaction':0})
...: my_dict[i[0]]['session'] += i[1]
...: my_dict[i[0]]['transaction'] += i[2]
...:
如果在dict中找不到key,setdefault方法将只设置默认值。否则就不会设置它。
另一种方法
In [44]: for i in a_list:
...: my_dict[i[0]] = dict()
...: my_dict[i[0]]['session'] = my_dict[i[0]].setdefault('session', 0) + i[1]
...: my_dict[i[0]]['transaction'] = my_dict[i[0]].setdefault('transaction', 0) + i[2]
...:
您无需在此处检查dict中是否存在密钥。
答案 1 :(得分:0)
这种方法在速度方面胜过.setdefault()
- 方法。
mydict = {}
for i in a_list:
if i[0] not in mydict:
mydict[i[0]] = {'session': 0, 'transactions': 0}
mydict[i[0]]['session'] += i[1]
mydict[i[0]]['transactions'] += i[2]
在iPython(Python2.7.13以及Python3.6.0)中使用我的MacBookAir进行基准测试,其中包含1000000个项目的样本列表