当每个字典都有不同的键时,如何按值对字典列表进行排序?
Posted
技术标签:
【中文标题】当每个字典都有不同的键时,如何按值对字典列表进行排序?【英文标题】: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]
我该怎么做?任何帮助将不胜感激。
非常感谢您
【问题讨论】:
docs.python.org/2/library/… 这很不简洁。我已经尝试过了,但是当键在整个字典中都具有相同的名称时,它似乎可以工作 【参考方案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]
【讨论】:
事实上是的,这不符合我想要的顺序,它必须按值降序排列 谢谢,这样好多了!! :)以上是关于当每个字典都有不同的键时,如何按值对字典列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章