【问题标题】:How to sort a dictionary by values which are lists using itemgetter?如何通过使用 itemgetter 的列表值对字典进行排序?
【发布时间】:2021-10-01 14:06:11
【问题描述】:

我有以下字典:

Dict = {'1': ['Adam', 27], '2': ['Brad', 31], '3': ['Paul', 19]}

我想按列表中的 int 值升序排序。所以我想要的结果是:

Desired = {'3': ['Paul', 19], '1': ['Adam', 27], '2': ['Brad', 31]}

我正在尝试执行以下操作:

v = sorted(Dict.items(), key=operator.itemgetter([1][1]))

但它不断出错:

v = sorted(Dict.items(), key=operator.itemgetter([1][1]))
IndexError: list index out of range

我不能将使用多个维度的项目传递给 itemgetter 吗?我错过了什么?

谢谢!

【问题讨论】:

  • 警告:您可以对字典的项目进行排序,但不能对字典进行排序,因为字典没有排序。这意味着,在你的情况下,Dict == Desired。您确实排序的是Dict.items(),它不完全是一个列表,但几乎就像一个列表。
  • 另外,为了解释错误:python 将[1][1] 解释为一个元素的列表,1,您从中获取第二个元素,因此它抱怨IndexError。这是因为itemgetter 没有一些特殊的语法,所以以这种方式提供参数没有意义。最后,还有一个事实,itemgetter 只能获取一级深度的项目,而不是你想要的两级。
  • 感谢您的澄清和添加有关错误的详细信息。我现在明白了很多!

标签: python python-3.x list sorting dictionary


【解决方案1】:

在这种情况下,您不能在此处使用itemgetter。使用lambda

>>> sorted(Dict.items(), key=lambda x: x[1][1])
[('3', ['Paul', 19]), ('1', ['Adam', 27]), ('2', ['Brad', 31])]

创建我自己的函数并传递字典中的值

你可以,但你必须使用Dict.items()

def my_sort(x):
    return x[1][1]

sorted(Dict.items(), key=my_sort)
# [('3', ['Paul', 19]), ('1', ['Adam', 27]), ('2', ['Brad', 31])]

【讨论】:

  • 谢谢!只是为了我的理解,有没有一种方法可以在不使用 lambda 函数的情况下做到这一点?也许创建我自己的函数,我从字典中传递值并返回第一个元素,然后成为我的键?
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
相关资源
最近更新 更多