识别Ansible字典中值含重复元素的键值对并筛选输出
解决方案
实现逻辑
- 先统计所有元素在全部值列表中的出现总次数
- 遍历原字典筛选键值对:只要当前值列表中存在至少一个元素出现次数大于1(即与其他列表有公共元素),就保留该键值对,否则移除
代码实现(使用Python标准库Counter,简洁易读)
from collections import Counter Ip = {'a':['one','two','three'],'b':['one','five','six'],'c':['seven','eight','nine'],'d':['five']} # 统计所有元素的全局出现次数 all_elements = [] for val_list in Ip.values(): all_elements.extend(val_list) elem_counter = Counter(all_elements) # 筛选符合要求的键值对 Op = { key: val_list for key, val_list in Ip.items() if any(elem_counter[elem] > 1 for elem in val_list) } print(Op)
运行输出:
{'a': ['one', 'two', 'three'], 'b': ['one', 'five', 'six'], 'd': ['five']}
无导入依赖版本
如果不想导入任何库,也可以手动实现计数逻辑,效果完全一致:
Ip = {'a':['one','two','three'],'b':['one','five','six'],'c':['seven','eight','nine'],'d':['five']} # 手动统计元素出现次数 elem_count = {} for val_list in Ip.values(): for elem in val_list: elem_count[elem] = elem_count.get(elem, 0) + 1 # 筛选键值对 Op = {k: v for k, v in Ip.items() if any(elem_count[e] > 1 for e in v)}
内容的提问来源于stack exchange,提问作者Ramarao Kedarasetti
相关产品推荐
相关产品推荐

