如何不使用循环实现字典中匹配列表元素的键对应值累加
首先说明你现有代码的两个问题:
- 变量名不规范:你定义的字典变量名为
dic,但循环中使用dict.keys(),dict是Python内置的字典类型名,覆盖内置名会导致后续不可预知的错误。 - 逻辑局限性:现有逻辑只会给每个在tokens中出现过的key加1,就算key重复出现也不会累加,如果你需要按实际出现次数计数,现有逻辑不满足需求。
以下是无显式for循环的实现方案(所有遍历逻辑由Python内置方法隐式处理):
场景1:保留原逻辑(只要key在tokens中出现过就加1,不累加重复次数)
dic = {"A":0, "B":0, "C":0} tokens = ["A", "B", "C", "C", "D", "E", "F"] token_set = set(tokens) # 取字典键和tokens的交集批量更新 dic.update((k, dic[k] + 1) for k in dic.keys() & token_set)
运行后输出:{'A': 1, 'B': 1, 'C': 1},和你原有代码效果完全一致。
场景2:按实际出现次数累加计数(示例中C出现2次,对应value加2)
借助标准库collections.Counter实现:
from collections import Counter dic = {"A":0, "B":0, "C":0} tokens = ["A", "B", "C", "C", "D", "E", "F"] # 统计tokens中各元素的出现次数 token_cnt = Counter(tokens) # 批量更新字典值 dic.update((k, dic[k] + token_cnt[k]) for k in dic.keys() & token_cnt.keys())
运行后输出:{'A': 1, 'B': 1, 'C': 2},符合通用的出现次数统计需求。
内容的提问来源于stack exchange,提问作者Sheldon
相关产品推荐
相关产品推荐

