【问题标题】: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 .. 它解决了问题

标签: python-3.x list sorting dictionary


【解决方案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)}

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多