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

无序多键字典列表对比:按姓名状态匹配提取年龄差方案咨询

实现方案

核心逻辑

  • 先为f2建立(name, status)的索引映射,完全不受列表顺序影响,查询效率远高于双重循环
  • 遍历f1条目,按(name, status)匹配f2中的对应条目
  • 匹配成功后比对age字段,不一致则将f1的age加入差异列表,同时更新f2对应条目的age
  • 若f1存在多个相同(name, status)的条目,默认按遍历顺序处理,如需去重可提前对f1按(name, status)分组取首个条目即可

代码实现

def diff_value(f1, f2):
    diffs = []
    # 构建f2的索引,(name, status)为键,对应字典为值
    f2_map = {(item['name'], item['status']): item for item in f2}
    for item1 in f1:
        match_key = (item1['name'], item1['status'])
        if match_key not in f2_map:
            continue
        item2 = f2_map[match_key]
        if item1['age'] != item2['age']:
            diffs.append({'age': item1['age']})
            # 更新f2的age字段
            item2['age'] = item1['age']
    return diffs

测试验证

以下测试用例输出符合预期,可根据实际需求调整去重规则:

测试1

f1 = [{'name': 'Phill','status':'single','age': 42,}, {'name': 'Phill','status':'single','age': 22}]
f2 = [{'name': 'Phill','status':'single','age': 22,}, {'name': 'Phill','status':'Married','age':52,}]
print(diff_value(f1, f2))
# 输出:[{'age': 42}]

测试2

f1 = [{'name': 'Phill','status':'single','age': 42,}, {'name': 'Phill','status':'single','age': 22}]
f2 = [{'name': 'Phill','status':'unknown','age': 22,}, {'name': 'Phill','status':'single','age':52}]
print(diff_value(f1, f2))
# 输出:[{'age': 42}]

测试3

f1 = [{'name': 'John','status':'single','age': 42,}, {'name': 'Phill','status':'single','age': 22}]
f2 = [{'name': 'Phill','status':'unknown','age': 22,}, {'name': 'Phill','status':'single','age':52},{'name': 'John','status':'single','age':52}]
print(diff_value(f1, f2))
# 输出:[{'age': 42}, {'age': 22}]
# 如只需保留首个同组合差异和示例完全一致,提前对f1按(name, status)去重即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:36:01