我想知道是否有一种更有效的方法来附加字典值(如果键存在),或者创建一个(如果不存在)。目前,我使用“if key in set(dict.keys())
”
我读了很多关于collections.defaultdict
的主题,但它有效吗?我的意思是,当您使用collections.defaultdict
时,Python是否会生成“if key in ...”或者它的工作方式有所不同?
我的问题是我的字典变得越来越大,所以我的 if key in set(dict.keys())
每次执行的时间越来越长
这是我谈论的一个例子:
# a_list is a result of a loop that can iterate more than 10, 100, 1000...times
a_list = [[url1, sessions, transactions], [url2, sessions, transactions]...]
mydict = {}
for i in a_list:
# if my key doesn't exist
if i[0] not in set(mydict.keys()):
mydict[i[0]] = {}
mydict[i[0]]['session'] = i[1]
mydict[i[0]]['transactions'] = i[2]
else:
# if my key exists
mydict[i0]['sessions'] += i[1]
mydict[i0]['transactions'] += i[2]
更准确地说,这个脚本是为了处理 Google Analytics API,以避免采样(所以我为一个月的每一天发出请求,所以我的网址(mydict 键)很有可能是相同的我每天都要求。
最佳答案
如果您想在不知道字典中是否存在键的情况下使用列表或任何其他数据类型,这就是如何使用 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]
...:
如果在字典中找不到 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]
...:
您不必在此处检查字典中是否存在键。
关于python - 如果 python 中存在键,则填充或附加 dict 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386878/