如何从嵌套字典提取公共子项并匹配对应的父母对?
解决方案:找出共享孩子的父母对
我来帮你搞定这个问题!我们可以通过两步高效实现需求:先建立「孩子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
相关产品推荐
相关产品推荐

