如何更新现有值并将新值附加到字典?

时间:2019-07-30 13:04:37

标签: python dataframe dictionary

我有N个数据帧,我从每个数据帧中提取df['col'].value_counts()并将其转换为字典,所以我有: my_dict = {'key1' : val1, 'key2' : val2, ... , 'keyM' : valM}

如何更新my_dict,以便: 如果随机的新数据帧D具有与先前数据帧相同的密钥(例如'key1'),则它将值添加到val1。换句话说,如果对于同一键('key1'),'key1'的值是21,而新数据帧的值是18,则字典键值现在应该是'key1' : 39。 / p>

但是,如果密钥不存在,则应使用相关值创建一个新密钥。

这有意义吗?我觉得我太复杂了...

3 个答案:

答案 0 :(得分:4)

collections.Counter为此而构建。

from collections import Counter
c1 = Counter(my_dict)
c2 = Counter(my_other_dict)
c_sum = c1 + c2

另一方面,您也应该能够在熊猫内执行此操作; value_counts()返回一个Series,您应该可以直接add到其他Series对象,并使其表现出预期的效果。

答案 1 :(得分:1)

遍历新键的键/值并更新my_dict。您还应该考虑使用集合模块中的defaultdict

my_dict = {'key1': 21, 'key2': 10}
my_dict2 = {'key1': 18, 'key3': 5}

for k, v in my_dict2.items():
    if k in my_dict:
        my_dict[k] += v
    else:
        my_dict[k] = v

使用defaultdict

from collections import defaultdict

my_dict = defaultdict(int, {'key1': 21, 'key2': 10})
my_dict2 = {'key1': 18, 'key3': 5}

for k, v in my_dict2.items():
    my_dict[k] += v

答案 2 :(得分:0)

这是另一个也使用collections的答案:

from collections import defaultdict as ddict

some_list_of_dicts = [
    {'val1': 5, 'val2': 3},
    {'val1': 2, 'val2': 1, 'val3': 9},
]

my_dict = ddict(int)

for i in some_list_of_dicts:
    for key, count in i.items():
        my_dict[key] += count

print(dict(my_dict))

引入未知密钥后,defaultdict中的int将被初始化为0。