【问题标题】:Sorting list of dictionaries with list as values based on second item of list value in dictionary根据字典中列表值的第二项对具有列表作为值的字典列表进行排序
【发布时间】:2019-02-25 14:56:42
【问题描述】:

我有一个包含字典的列表,每个字典中的值也是列表,如:

a = [{"25.21" : [400,500] , "25.22" : [700,502]} , {"12.15" : [350,800] , "12.13" : [750,803]}]

我想根据列表的第二项对主列表进行排序,这是字典的值,它又是主列表的一项。输出应该是这样的:

a = [ {"12.13" : [750,803] , "12.15" : [350,800] } , {"25.22" : [700,502], "25.21" : [400,500] }]

列表中的第一项作为字典中每个键的值会有所不同。如果可能的话,如何在不使用 operator itemgetter 的情况下在 oneliner 中做到这一点?

这个问题与this one不同。在这种情况下,列表中字典的值仅包含整数,因为此问题将列表作为主列表中的字典值。

【问题讨论】:

  • @BearBrown 这个问题有点不同,因为列表中字典项的值也是列表,整个列表将根据字典列表值的第二项进行排序。
  • 我不认为它是一样的,你根据特定的键订购字典,这里的键并不总是相同的。
  • 你到底想做什么?这有点不清楚。展示你的努力以及为什么它不起作用。想法:创建一个函数来提取/创建您想要排序的值。

标签: python python-3.x list dictionary


【解决方案1】:

使用sorted

演示:

a = [{"25.21" : [400,500] , "25.22" : [700,502]} , {"12.15" : [350,800] , "12.13" : [750,803]}]

print(sorted(a, key=lambda x: list(x.items())[1][1], reverse=True))
#print(sorted(a, key=lambda x: x.items()[1][1], reverse=True))   #python2

输出:

[{'12.15': [350, 800], '12.13': [750, 803]}, {'25.21': [400, 500], '25.22': [700, 502]}]

【讨论】:

  • 使用字典中的任意项进行排序很奇怪。真的是这个意图吗?
  • 这个还缺少一个东西,每个字典键值对没有按照列表值的第二项在字典内部排序。
  • 那么您还想根据键值对字典进行排序吗?您的问题并不清楚。
  • 是的,字典也将根据值列表的第二项进行排序。就像这里在第一个字典 803 > 800 中一样,所以键“12.13”将是第一个而不是键“12.15”以及在第二个字典 502 > 500 中,所以键“25.22”将是第一个而不是键“25.21”。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2021-08-14
  • 2021-05-29
相关资源
最近更新 更多