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

如何从嵌套字典提取公共子项并匹配对应的父母对?

解决方案:找出共享孩子的父母对

我来帮你搞定这个问题!我们可以通过两步高效实现需求:先建立「孩子CPR」到「父母CPR」的映射,再从映射中提取并去重父母对。

步骤1:构建孩子CPR到父母的映射

首先遍历你的register字典,把每个有孩子的人的CPR,关联到他们每个孩子的CPR上。这样我们就能快速知道每个孩子对应的所有父母。

代码实现:

# 初始化一个空字典,用来存孩子CPR对应的父母CPR列表
child_to_parents = {}

# 遍历register里的每一个人员信息
for person in register.values():
    # 只处理有孩子信息的人
    if "Children" in person:
        parent_cpr = person["CPR"]
        # 遍历当前人的每个孩子CPR
        for child_cpr in person["Children"]:
            # 如果孩子CPR还没在映射里,先初始化一个空列表
            if child_cpr not in child_to_parents:
                child_to_parents[child_cpr] = []
            # 将当前父母的CPR添加到对应孩子的列表中
            child_to_parents[child_cpr].append(parent_cpr)

步骤2:提取并去重父母对

有了上面的映射后,我们只需要筛选出有至少两个父母的孩子,然后生成他们的父母对,同时避免重复(比如(A,B)和(B,A)视为同一对)。

代码实现:

# 用集合来存父母对,自动去重
unique_parent_pairs = set()

for child_cpr, parents in child_to_parents.items():
    # 只处理有2个及以上父母的孩子
    if len(parents) >= 2:
        # 生成所有不重复的两两组合
        for i in range(len(parents)):
            for j in range(i + 1, len(parents)):
                # 对父母CPR排序后转成元组,确保(A,B)和(B,A)是同一个元素
                pair = tuple(sorted((parents[i], parents[j])))
                unique_parent_pairs.add(pair)

可选:获取父母的详细信息

如果需要把父母对和他们的姓名等信息关联起来,可以再扩展代码,从register中提取对应父母的详细数据:

pair_with_details = []

for child_cpr, parents in child_to_parents.items():
    if len(parents) >= 2:
        for i in range(len(parents)):
            for j in range(i + 1, len(parents)):
                # 从register中找到对应CPR的父母信息
                parent1 = next(p for p in register.values() if p["CPR"] == parents[i])
                parent2 = next(p for p in register.values() if p["CPR"] == parents[j])
                # 整理成结构化数据
                pair_with_details.append({
                    "孩子CPR": child_cpr,
                    "父母1": {
                        "CPR": parent1["CPR"],
                        "名": parent1["First name"],
                        "姓": parent1["Last name"]
                    },
                    "父母2": {
                        "CPR": parent2["CPR"],
                        "名": parent2["First name"],
                        "姓": parent2["Last name"]
                    }
                })

# 打印结果示例
for pair in pair_with_details:
    print(f"孩子CPR: {pair['孩子CPR']}")
    print(f"父母1: {pair['父母1']['名']} {pair['父母1']['姓']} ({pair['父母1']['CPR']})")
    print(f"父母2: {pair['父母2']['名']} {pair['父母2']['姓']} ({pair['父母2']['CPR']})")
    print("---")

方案优势

  • 高效性:时间复杂度为O(N + M),其中N是总人数,M是所有孩子的总数,在600条数据的场景下几乎瞬间完成。
  • 去重彻底:通过排序+集合的方式,完美避免了重复的父母对。
  • 扩展性强:可以轻松扩展获取更多父母/孩子的详细信息,满足后续需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:12:47