You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查未知长度的Python字典列表是否仅含成对重复字典

检查字典列表是否仅含完全成对的字典

需求说明

  • 给定一个字典列表,需验证每个字典的出现次数均为偶数(即完全成对)
  • 例外规则:仅包含1个条目的列表默认判定为符合要求

解决方案

利用collections.Counter统计字典出现次数,由于字典不可直接哈希,需先将其转换为可哈希的排序元组(保证内容相同的字典被视为同一元素)。

from collections import Counter

def is_paired_dicts(list_of_dict):
    # 处理单元素列表的例外情况
    if len(list_of_dict) == 1:
        return True
    # 将字典转换为排序后的键值对元组,确保内容相同的字典被统一识别
    hashable_dicts = [tuple(sorted(d.items())) for d in list_of_dict]
    # 统计每个元素的出现次数
    count_result = Counter(hashable_dicts)
    # 检查所有元素的出现次数是否为偶数
    return all(count % 2 == 0 for count in count_result.values())

测试示例

符合要求的案例

# 案例1:成对出现的不同字典
test1 = [
    {'value_a': '100', 'value_b': '25'},
    {'value_a': '200', 'value_b': '10'},
    {'value_a': '200', 'value_b': '10'},
    {'value_a': '100', 'value_b': '25'},
]
print(is_paired_dicts(test1))  # 输出: True

# 案例2:单个字典成对出现
test2 = [
    {'value_a': '100', 'value_b': '25'},
    {'value_a': '100', 'value_b': '25'},
]
print(is_paired_dicts(test2))  # 输出: True

# 案例3:仅含一个条目的列表
test3 = [{'value_a': '100', 'value_b': '25'}]
print(is_paired_dicts(test3))  # 输出: True

不符合要求的案例

# 案例1:存在不成对的字典(第二个和第三个字典内容不同)
test4 = [
    {'value_a': '100', 'value_b': '25'},
    {'value_a': '200', 'value_b': '10'},
    {'value_a': '200', 'value_b': '17'},
    {'value_a': '100', 'value_b': '25'},
]
print(is_paired_dicts(test4))  # 输出: False

# 案例2:字典总数为奇数,存在单个未成对的字典
test5 = [
    {'value_a': '100', 'value_b': '25'},
    {'value_a': '200', 'value_b': '10'},
    {'value_a': '100', 'value_b': '25'},
]
print(is_paired_dicts(test5))  # 输出: False

# 案例3:两个不同字典各出现一次,均未成对
test6 = [
    {'value_a': '100', 'value_b': '25'},
    {'value_a': '200', 'value_b': '10'},
]
print(is_paired_dicts(test6))  # 输出: False

说明

  • 将字典转换为排序元组是为了避免因字典键的顺序不同导致误判(比如{'a':1, 'b':2}和{'b':2, 'a':1}会被视为同一个元组)
  • all()函数会遍历所有计数结果,只要有一个计数为奇数就返回False,否则返回True

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:39:57