gpt4 book ai didi

python - 从字典中的 itemgetter 查找值

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:31 26 4
gpt4 key购买 nike

我有一个要排序的元组列表。元组包含字符串:

connectionsList = [('C', 'B'), ('A', 'C'), ('D', 'B'), ('C','D')]

元组中的字符串将数值存储在字典中:

valuesDict = {'A':3, 'B':5, 'C':1, 'D':2}

我想做的是根据元组字典中值的总和对列表进行排序。这个玩具示例的期望输出是:

[(C,D), (A,C), (C,B), (D,B)]

总和为:

[3, 4, 6, 7]

使用 itemgetter,我可以按位置按字母顺序排序:

sortedView = sorted(connectionsList, key=itemgetter(0,1))

但是,我无法在 dict 中查找 itemgetter 的值。运行这个:

sortedView = sorted(connectionsList, key=valuesDict[itemgetter(0)] + valuesDict[itemgetter(1)])

给出 KeyError: operator.itemgetter(0) 的字典错误。

如何根据 dict 中的值创建排序?

最佳答案

不要使用itemgetter实例;你需要给他们打电话,但他们在这里太过分了。

只需使用传递到 lambda 中的 key 值直接访问字典。它是一个元组,所以添加索引:

sortedView = sorted(connectionsList, key=lambda k: valuesDict[k[0]] + valuesDict[k[1]])

key 参数必须是一个可调用对象,它接受一个参数(被排序的项目之一),并返回您实际排序的值。 itemgetter() 根据您调用它的对象的索引返回结果; itemgetter(0)(some_tuple) 将从传入的元组中返回第一个元素。

lambda 可以做同样的事情,在上面的解决方案中,lambda 返回给定元组所需的总和。

演示:

>>> connectionsList = [('C', 'B'), ('A', 'C'), ('D', 'B'), ('C','D')]
>>> valuesDict = {'A':3, 'B':5, 'C':1, 'D':2}
>>> sorted(connectionsList, key=lambda k: valuesDict[k[0]] + valuesDict[k[1]])
[('C', 'D'), ('A', 'C'), ('C', 'B'), ('D', 'B')]

您还可以将元组视为任意长度的序列。如果您还考虑到并非元组中的所有值都是 valuesDict 映射的有效键的可能性(取而代之的是 0),您还可以通过以下方式获得解决方案:

sortedView = sorted(connectionsList, key=lambda k: sum(valuesDict.get(v, 0) for v in k))

这更通用、更健壮。

您也不需要在按字母顺序排序时使用 itemgetter() 对象;元组已按 0, 1 顺序提供,因此您无需使用排序键即可获得相同的排序顺序。

关于python - 从字典中的 itemgetter 查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com