lambda函数错误:TypeError:“function”对象不是iterab

2024-09-29 17:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行以下python notebook

我到了必须使用“compute_cluster_similarity”函数的部分。在

def compute_cluster_similarities(kwds, kwd2id, vectors, lbl2centroid):
    kwd2cluster_sims = dict()
    for kwd in kwds:
        ix = kwd2id[kwd]
        nvec = vectors[ix]
        sims = []

        for lbl, centroid in lbl2centroid.items():
            cosine_sim = np.inner(nvec, centroid)
            sims.append((lbl,cosine_sim))
        sims = sorted(sims, key = lambda lbl,sim: -sim)
        kwd2cluster_sims[kwd] = sims
        if len(kwd2cluster_sims) % 1000 == 0:
            print("%i computed out of %i" % (len(kwd2cluster_sims), len(all_kwds)))
    return kwd2cluster_sims

它返回错误:

TypeError: () missing 1 required positional argument: 'sim'

首先,我还在努力理解lambda代码的这一部分。我知道了lambda指令的目标是什么,但不明白这行代码的意义是什么,比如。。它(隐式)是否返回2个值(sims,key)??正在分拣什么?在

我认为这个错误是由Python3引起的,但是即使这是在Python2上执行的,对我来说也没有意义。 这让我很困惑。。。如何解决这个错误?请给我解释一下发生了什么,而不仅仅是修复。在

编辑: 我正在使用pdb库调试代码,我意识到这个错误是由“sorted()”函数返回的。最初的错误是:

*** TypeError: 'function' object is not iterable

我所做的:

^{pr2}$

在Pdb模式下:

(Pdb) sims, key = lambda lbl,sim: -sim
*** TypeError: 'function' object is not iterable

Tags: lambdakey函数代码len错误simcluster
1条回答
网友
1楼 · 发布于 2024-09-29 17:21:16

sortedkey参数中的函数与列表元素一起获取,因此它只接受一个参数。在

如果您替换:

key = lambda lbl,sim: -sim

有:

^{pr2}$

它应该如你所期望的那样工作。在

有关如何使用sortedkey参数的更多说明,请参阅documentation。在

相关问题 更多 >

    热门问题