You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何统计字典元组中所有不重复键的总数量?

解决字典元组中不重复键的统计问题

嘿,这个问题很好解决,核心就是去重嘛!你原来的代码用列表存所有键,重复的ce会被多次添加,所以得到9而不是预期的7。咱们可以利用Python里的set(集合)来搞定,因为集合天然不允许重复元素,完美契合需求。

下面给你几种简洁高效的实现方式:

方法一:分步遍历+集合收集

这种方式逻辑清晰,适合新手理解:

def count_unique_keys(self):
    unique_keys = set()
    # 遍历元组里的每个字典
    for d in self.dl:
        # 把当前字典的所有键添加到集合(自动去重)
        unique_keys.update(d)  # 字典迭代默认取键,所以d等价于d.keys()
    return len(unique_keys)

运行这段代码,集合里最终会包含{'a','b','c','d','e','f','g'},长度正好是7。

方法二:一行式生成器+集合

如果喜欢简洁的写法,用生成器表达式直接构建集合:

def count_unique_keys(self):
    return len({k for d in self.dl for k in d})

这里的生成器{k for d in self.dl for k in d}会遍历所有字典的键,自动去重后生成集合,直接取长度即可,非常清爽。

方法三:用itertools.chain合并键

如果处理的字典数量很多,用itertools.chain可以更高效地合并所有键:

from itertools import chain

def count_unique_keys(self):
    # chain.from_iterable会把每个字典的键连起来,形成一个迭代器
    return len(set(chain.from_iterable(self.dl)))

这种方式避免了手动嵌套循环,代码可读性也不错。

为什么原来的代码不对?

你原来的代码把所有键都append到列表new里,重复的c出现了2次,e也出现了2次,总共有3+3+3=9个元素,所以len(new)返回9。而集合会自动剔除重复元素,所以能得到正确的不重复键数量。

内容的提问来源于stack exchange,提问作者sparklecoding

火山引擎 最新活动