根据关键字对嵌套字典进行排序

时间:2019-03-06 14:40:51

标签: python dictionary

我的字典如下:

{' PLATINUM': [{'Name': 'MATH',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50},
  {'Name': 'SCIENCE',
   'Description': 'You can earn up to 100 Rs per year',
   'value': 100},
  {'Name': 'TOTAL',
   'Description': 'You can earn up to 200 Rs per year',
   'value': 200},
  {'Name': 'SOCIAL',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50}],
 'TITANIUM': [{'Name': 'SOCIAL',
   'Description': 'You can earn up to 20 Rs per year',
   'value': 20},
  {'Name': 'MATH',
   'Description': 'You can earn up to 10 Rs per year',
   'value': 10},
  {'Name': 'TOTAL',
   'Description': 'You can earn up to 30 Rs per year',
   'value': 30}]}

我希望在每个级别上对它进行排序-“ PLATINUM”,“ TITANIUM”(以及多个级别)和“ value”。 因此预期的字典将如下所示:

{' PLATINUM': [
  {'Name': 'TOTAL',
   'Description': 'You can earn up to 200 Rs per year',
   'value': 200},
  {'Name': 'SCIENCE',
   'Description': 'You can earn up to 100 Rs per year',
   'value': 100},
  {'Name': 'MATH',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50},
  {'Name': 'SOCIAL',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50}],
 'TITANIUM': [ 
  {'Name': 'TOTAL',
   'Description': 'You can earn up to 30 Rs per year',
   'value': 30}
  {'Name': 'SOCIAL',
   'Description': 'You can earn up to 20 Rs per year',
   'value': 20},
  {'Name': 'MATH',
   'Description': 'You can earn up to 10 Rs per year',
   'value': 10}]}

有人可以帮助我用python代码实现它吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下字典理解,其中内部字典根据键valuesorted

from operator import itemgetter 
d = {' PLATINUM': [{'Name': 'MATH', 'Description': 'You ...'}

{k:sorted(d[k], key=itemgetter('value'), reverse=True) for k in d}

输出

{' PLATINUM': [{'Name': 'TOTAL',
   'Description': 'You can earn up to 200 Rs per year',
   'value': 200},
  {'Name': 'SCIENCE',
   'Description': 'You can earn up to 100 Rs per year',
   'value': 100},
  {'Name': 'MATH',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50},
  {'Name': 'SOCIAL',
   'Description': 'You can earn up to 50 Rs per year',
   'value': 50}],
 'TITANIUM': [{'Name': 'TOTAL',
   'Description': 'You can earn up to 30 Rs per year',
   'value': 30},
  {'Name': 'SOCIAL',
   'Description': 'You can earn up to 20 Rs per year',
   'value': 20},
  {'Name': 'MATH',
   'Description': 'You can earn up to 10 Rs per year',
   'value': 10}]}