如何根据值列表对字典进行排序
Posted
技术标签:
【中文标题】如何根据值列表对字典进行排序【英文标题】:How to sort on a dictionary w.r.t the list of values 【发布时间】:2021-12-29 13:44:52 【问题描述】:我在每个字典键的列表中有 2 个值,需要对 value1 上的字典 desc 和 value2 上的 asc 进行排序:
dict1='123126':[100,'DDD'],'123121':[100,'AAA'],'123122':[100,'BBB'],'123123':[101,'CCC']
dict2 = key: val for key,val in sorted(dict1.items(), key = lambda ele: ((ele[1][0]),(ele[1][1])), reverse = True)
print(dict2)
output >>
'123123': [101, 'CCC'], '123126': [100, 'DDD'], '123122': [100, 'BBB'], '123121': [100, 'AAA']
但预期的输出是
'123123': [101, 'CCC'], '123126': [100, 'AAA'], '123122': [100, 'BBB'], '123121': [100, 'DDD']
【问题讨论】:
我已经用两个单独的语句解决了这个问题:dict1='123126':[100,'DDD'],'123121':[100,'AAA'],'123122':[ 100,'BBB'],'123123':[101,'CCC'] dict2 = key: val for key,val in sorted(dict1.items(), key = lambda ele: ele[1][1] , reverse = False) dict3 = key: val for key,val in sorted(dict2.items(), key = lambda ele: ele[1][0], reverse = True) 你能试试dict(sorted(d.items(),key= lambda x:(-x[1][0], x[1][1])))
吗?我不明白为什么我的解决方案对你不起作用。
感谢 Onyambu .. 它解决了问题
【参考方案1】:
只调用降序。自然,排序是升序的。所以不需要使用它。因此你可以这样做:
dict(sorted(d.items(),key= lambda x:-x[1][0]))
Out[25]:
'123123': [101, 'CCC'],
'123126': [100, 'AAA'],
'123122': [100, 'BBB'],
'123121': [100, 'DDD']
【讨论】:
这对我不起作用 dict(sorted(dict1.items(),key= lambda x:-x[1][0])) '123123': [101, 'CCC' ], '123126': [100, 'DDD'], '123121': [100, 'AAA'], '123122': [100, 'BBB']【参考方案2】:我用下面的方法解决了,虽然我希望这可以在一个语句中完成。
dict1='123126':[100,'DDD'],'123121':[100,'AAA'],'123122':[100,'BBB'],'123123':[101,'CCC']
dict2 = key: val for key,val in sorted(dict1.items(), key = lambda ele: ele[1][1], reverse = False)
dict3 = key: val for key,val in sorted(dict2.items(), key = lambda ele: ele[1][0], reverse = True)
print(dict2)
print(dict3)
输出
'123121': [100, 'AAA'], '123122': [100, 'BBB'], '123123': [101, 'CCC'], '123126': [100, 'DDD']
Expeceted- dict3
'123123': [101, 'CCC'], '123121': [100, 'AAA'], '123122': [100, 'BBB'], '123126': [100, 'DDD']
【讨论】:
【参考方案3】:谢谢, 下面这个解决了 dict4 = key: val for key,val in sorted(dict1.items(), key = lambda ele: (-ele[1][0],ele[1][1]), reverse = False)
【讨论】:
以上是关于如何根据值列表对字典进行排序的主要内容,如果未能解决你的问题,请参考以下文章