【问题标题】:How to order a list of dictionaries by value when each dictionary has a different key?当每个字典都有不同的键时,如何按值对字典列表进行排序?
【发布时间】:2019-12-02 11:02:45
【问题描述】:

我有以下字典列表:

dicts = [{'ENE001SOLC': 3},
 {'TRN002SIGN': 4},
 {'ENE001SOLC': 4, 'TRN002SIGN': 3},
 {'TRN002SIGN': 3},
 {'TRN002SOLC': 3, 'SAL016DECL': 3},
 {'ENE001SOLC': 5, 'SAL016DECL': 3},
 {'ENE001SOLC': 4}]

我想按每个 dict 中的值按降序对这个列表进行排序(越高越好)。我已经访问了很多帖子,但是当每个字典的键值相同时,它们都提供了对列表进行排序的解决方案,但事实并非如此。预期的输出将是这样的:

[{'ENE001SOLC': 5, 'SAL016DECL': 3},
{'ENE001SOLC': 4, 'TRN002SIGN': 3},
{'ENE001SOLC': 4},
{'TRN002SIGN': 4},
{'TRN002SOLC': 3, 'SAL016DECL': 3},
{'ENE001SOLC': 3},
{'TRN002SIGN': 3}]

我该怎么做?任何帮助将不胜感激。

非常感谢您

【问题讨论】:

  • 这很不简洁。我已经尝试过了,但是当键在整个字典中都具有相同的名称时,它似乎可以工作

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


【解决方案1】:

尝试使用这个sorted命令,排序器将是值的最大值,为什么我需要-,所以我将数字设为负数,如果我不这样做,顺序会从低到高:

print(sorted(dicts, key=lambda x: -max(x.values())))

对于熊猫Series 做:

dicts = dicts.to_frame()
dicts[1] = dicts[0].apply(lambda x: -max(x.values()))
dicts = dicts.sort_values(1)
print(dicts[0])

输出:

5    {'ENE001SOLC': 5, 'SAL016DECL': 3}
1                     {'TRN002SIGN': 4}
2    {'ENE001SOLC': 4, 'TRN002SIGN': 3}
6                     {'ENE001SOLC': 4}
0                     {'ENE001SOLC': 3}
3                     {'TRN002SIGN': 3}
4    {'TRN002SOLC': 3, 'SAL016DECL': 3}
Name: 0, dtype: object

【讨论】:

  • 太棒了!!正是我需要的。非常感谢!!
  • 当然!!不过我还是要等 9 分钟
  • @Miguel2488 是的,我知道
  • 请问一个问题,如果列表实际上是熊猫系列怎么办?如果我使用这种方法来订购我的 pandas 系列,它可以工作,但是我失去了我的索引值,它们很重要,因为这个系列来自 groupby 操作。假设我的列表实际上是pd.Series,是否有执行相同的排序操作?再次感谢
  • 它工作得很好@U10-Forward。非常感谢?
【解决方案2】:

您可以使用sorted 并根据内部字典值中的最大值对列表进行排序:

from operator import itemgetter

sorted(dicts, key=lambda x: max(x.values()), reverse=True)

[{'ENE001SOLC': 5, 'SAL016DECL': 3},
 {'TRN002SIGN': 4},
 {'ENE001SOLC': 4, 'TRN002SIGN': 3},
 {'ENE001SOLC': 4},
 {'ENE001SOLC': 3},
 {'TRN002SIGN': 3},
 {'SAL016DECL': 3, 'TRN002SOLC': 3}]

【讨论】:

  • 事实上是的,这不符合我想要的顺序,它必须按值降序排列
  • 谢谢,这样好多了!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2010-09-09
相关资源
最近更新 更多