python - 如果 python 中存在键,则填充或附加 dict 值

标签 python dictionary

我想知道是否有一种更有效的方法来附加字典值(如果键存在),或者创建一个(如果不存在)。目前,我使用“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/

相关文章:

python - 显示角色成员discord.py

python - 创建有序计数器

python - 在两个列表中搜索项目

python - 根据 pandas 的条件计算最长连续周期

python - 日期时间转换为年

python - 错误 "mismatched input"期待 DEDENT

javascript - 如何获取存储在javascript文件输入中的文件字典?

java - 合并具有重复键的 map 列表

jQuery:使用对象设置元素的 'style' 属性

dictionary - Haskell:在关联列表中插入或附加值