【问题标题】:Issue with sorting a dict by value, when output wanted is in format (value, key)当需要的输出格式为(值,键)时,按值对字典进行排序的问题
【发布时间】:2020-02-09 05:04:07
【问题描述】:

我是一个初学者,需要帮助排序一个字典。这是我尝试过的:

english_spanish = {"hi": "hola", "thanks": "gracias", "yes": "si", "no": "no"}

for word in english_spanish:
sort = sorted(english_spanish.items(), key=lambda english_spanish: english_spanish[1])
sort = [' '.join(tups) for tups in sort]
for tuple in sort:
    print(tuple)

排序正确,但输出是

thanks gracias
hi hola
no no
yes si

我希望输出以相反的顺序,但由于排序输出一个元组,我很难反转它。

还有一件事,在这段代码中需要使用key=lambda,我知道做这种排序的其他方法,但是 lambda 部分让我有点困惑。

【问题讨论】:

  • 你读过the examples吗?基本上key 只是一个返回你想要排序的东西的函数。因此,编写一个函数(不一定是 lambda),从元组中返回第二项......它会对此进行排序。
  • sort = [' '.join(tups[::-1]) for tups in sort]?
  • @Krrr 这正是我所需要的,谢谢!
  • sort = [f'{value} {key}' for key, value in sort] 将是众多选择中的另一个。

标签: python sorting dictionary lambda


【解决方案1】:

我不知道您要按什么顺序对字典进行排序,但我会尽力解释一切:

当你运行english_spanish.items() 时,你会得到一个元组列表。

[(key1, value1), (key2, value2) ... ]

sorted 方法中的key lambda 指定要对元组的哪个元素进行排序。如果您设置lambda x: x[0],则意味着您正在使用元组(key1, value1) 的第一个值作为排序键(基本上是key1key2 等)进行排序。如果您使用lambda x: x[1],您将使用元组的第二个值作为排序键(基本上是value1value2 等)Python doc

如果您希望元组列表的值为 [(value1, key1), ...] 而不是 [(key1, value1), ...],您可以执行以下操作:

sort = sorted([v[::-1] for v in english_spanish.items()], key=lambda x: x[0])

但我认为最好使用 key 参数进行排序以指定要排序的元组的哪个值,而不是直接更改打印顺序

english_spanish = {"hi": "hola", "thanks": "gracias", "yes": "si", "no": "no"}

sort = sorted(english_spanish.items(), key=lambda x: x[1])
sort = [' '.join(tups[::-1]) for tups in sort]
for tuple in sort:
    print(tuple)

【讨论】:

  • 谢谢!我认为这颠倒了排序的顺序,但我想颠倒元组中单词出现的顺序,所以没有 reverse=True 并且格式为(value1, key1)
  • 这不是必需的,但我会用一个你想做的例子来更新
  • 谢谢! [::-1] 是我需要的,我不知道它存在!其他例子也非常有用,我觉得我现在更好地理解了这个问题! :)
猜你喜欢
  • 2011-07-08
  • 2012-03-19
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2016-04-17
相关资源
最近更新 更多