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

CS50 pset6 DNA项目中如何判断字典是另一字典的子集

错误原因分析
  • TypeError: unhashable type: 'dict' 报错原因:Python字典的in操作符默认检查的是键是否存在,而字典本身属于不可哈希类型,不能作为另一个字典的键,因此直接写seq_master_list in row必然触发报错。
  • 改items()后无输出的原因:seq_master_list.items()返回的是当前字典所有键值对的集合,row.items()是人员条目所有键值对的集合,用in是判断前者整个集合是不是后者的单个元素,显然不成立,因为后者的每个元素都是单个(键,值)元组,自然匹配不到结果。
正确实现逻辑

你需要的匹配规则是:seq_master_list里的所有STR键对应的计数,和当前人员条目里对应STR的计数完全相等,忽略人员条目里的name字段即可,有两种常用实现方案:

方案1:遍历STR键逐一比对

for row in dna:
    is_match = True
    for str_key, count in seq_master_list.items():
        # 只要有一个STR计数不匹配就终止检查
        if row.get(str_key) != count:
            is_match = False
            break
    if is_match:
        # 输出匹配到的人名
        print(row['name'])
        break

方案2:字典子集比对(写法更简洁)

先把人员条目里的name字段移除,得到仅含STR计数的字典,直接和seq_master_list判等即可:

for row in dna:
    # 提取当前条目中所有STR计数字段
    row_str_count = {k:v for k,v in row.items() if k != 'name'}
    if row_str_count == seq_master_list:
        print(row['name'])
        break
注意事项

如果按上述方案还是匹配不到,大概率是数据类型不一致导致:csv读取的所有值默认都是字符串类型,如果你统计得到的seq_master_list里的计数值是整数类型,需要统一两边的类型后再比对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:03