【问题标题】:Tuple unpacking in lambda functionlambda函数中的元组解包
【发布时间】:2018-02-09 07:40:15
【问题描述】:

我应该如何重写这个 lambda 以适应 Python3 标准?

top10_popular = [k for (k, (v1, v2)) in sorted(site_freq_150users.items(),
                                           key=lambda (k, (v1, v2)): v2, reverse=True)[:10]

我读到这与 Python3 中删除元组解包有关,但现在我确定如何正确重写它。

提前致谢。

【问题讨论】:

    标签: python-3.x lambda tuples


    【解决方案1】:

    只需通过直接命名所有顶级参数来使参数列表扁平化(即一维),而无需解包它们。稍后在返回表达式中进行解包。

    在您的示例中,您可以通过说 v = (v1, v2) 然后像这样创建 lambda 来做到这一点:

    lambda k, v : v[1]
    

    更新:以上不起作用。相反,您确实必须将整个项目放入参数中,然后从中提取键和值:

    lambda item : item[1][1]
    

    【讨论】:

    • 感谢您的回复。不幸的是,这不起作用。如果 site__freq_150users 是格式为 {k : (v1, v2)} 的字典,我尝试了以下操作:for (k, (v1, v2)) in site_freq_150users.items(): v = (v1, v2) top10_popular = [k for (k, (v1, v2)) in sorted(site_freq_150users.items(), key=lambda k, v: v[1], reverse=True)][:10],但出现“缺少位置参数 v”错误。好像我在做一些非常愚蠢的事情并且错过了一个明显的事情。
    • 谢谢,我认为应该可以。我设法通过结合您的方法来做到这一点,但是像这样完全消除了 lambda:v2_list = sorted([((v2, v1), k) for (k, (v1, v2)) in site_freq_150users.items()], reverse=True)[:10],然后提取到一个新列表:top10 = [] for ((v2, v1), k) in v2_list: top10.append(k)。不过,不是很优雅,哈哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多