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

求助:Python中从含人名键的嵌套字典提取最大相似度值的方法

解决嵌套人名键defaultdict找最相似人物的问题

我太懂你这种找不到适配方案的郁闷了!翻了一堆帖子全是统一字符串键的例子,完全套不上你这种用人名当键的嵌套defaultdict场景对吧?你的结构是外层键是被比对的人物,内层键是其他所有人,对应值是二者的相似度,目标就是找出每个人最相似的那个人,对吧?

先给你理清楚思路,再上可直接用的代码:

先明确你的数据结构(模拟示例)

假设你的finalDict长这样:

from collections import defaultdict

# 模拟你的嵌套defaultdict结构
finalDict = defaultdict(dict)
finalDict["Alice"]["Bob"] = 0.85
finalDict["Alice"]["Charlie"] = 0.62
finalDict["Bob"]["Alice"] = 0.85
finalDict["Bob"]["Charlie"] = 0.41
finalDict["Charlie"]["Alice"] = 0.62
finalDict["Charlie"]["Bob"] = 0.41

核心解决代码

这段代码会遍历每个人,找出他们的最相似对象,还特意处理了「排除自己和自己比对」的情况(如果你的数据里有自己的相似度值,比如1.0,这一步很关键):

# 用来存储每个人的最相似人物及对应相似度
most_similar = {}

for person, similarity_map in finalDict.items():
    # 过滤掉自己和自己的相似度(如果你的数据里没有这种情况,可以删掉这行)
    valid_scores = {other_person: score for other_person, score in similarity_map.items() if other_person != person}
    
    if not valid_scores:
        most_similar[person] = None  # 没有其他可比对的人物
        continue
    
    # 找出相似度最高的人物和分数
    closest_person, max_similarity = max(valid_scores.items(), key=lambda item: item[1])
    most_similar[person] = (closest_person, max_similarity)

# 打印结果看看
for person, result in most_similar.items():
    if result:
        print(f"{person} 最相似的人是 {result[0]},相似度为 {result[1]}")
    else:
        print(f"{person} 没有可比对的其他人物")

代码说明

  • 遍历外层的每一个被比对者,拿到他们和其他人的相似度字典
  • 用字典推导式过滤掉自己(避免把自己当成最相似的人)
  • 用max()函数结合lambda表达式,直接根据相似度值找出最大的那个键值对,也就是最相似的人和对应的分数
  • 把结果存在most_similar字典里,方便后续调用或者输出

如果你的数据里根本不会出现自己和自己的相似度,那可以直接删掉过滤那一行,代码会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:29:50