首页 > 解决方案 > 在Python中按属性对dict进行排序

问题描述

我想知道如何在 python3 中通过 "col" asc 来订购它。尝试排序和 orderDict。

d = {0: {'m1': 32, 'M1': 174, 'm2': 190, 'M2': 967, 'col': 6, 'cols': [2, 6, 11, 14, 15, 16, 18]},
 1: {'m1': 50, 'M1': 580, 'm2': 588, 'M2': 960, 'col': 10, 'cols': [2, 6, 7, 10, 11, 14, 15, 16, 17, 18, 19]},
 2: {'m1': 35, 'M1': 595, 'm2': 621, 'M2': 972, 'col': 8, 'cols': [2, 6, 10, 11, 14, 15, 16, 18, 19]},
 3: {'m1': 41, 'M1': 85, 'm2': 104, 'M2': 962, 'col': 7, 'cols': [2, 6, 11, 14, 15, 16, 18, 19]},
 4: {'m1': 39, 'M1': 293, 'm2': 299, 'M2': 964, 'col': 5, 'cols': [2, 6, 11, 14, 15, 16]},
 5: {'m1': 44, 'M1': 192, 'm2': 215, 'M2': 962, 'col': 9, 'cols': [2, 6, 7, 10, 11, 14, 15, 16, 18, 19]},
 6: {'m1': 46, 'M1': 238, 'm2': 255, 'M2': 963, 'col': 12, 'cols': [2, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19]},
 7: {'m1': 44, 'M1': 721, 'm2': 731, 'M2': 960, 'col': 2, 'cols': [11, 15, 16]},
 8: {'m1': 29, 'M1': 826, 'm2': 846, 'M2': 958, 'col': 3, 'cols': [11, 14, 15, 16]},
 9: {'m1': 49, 'M1': 525, 'm2': 543, 'M2': 953, 'col': 17, 'cols': [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 10: {'m1': 43, 'M1': 804, 'm2': 827, 'M2': 955, 'col': 1, 'cols': [11, 15]},
 11: {'m1': 48, 'M1': 273, 'm2': 291, 'M2': 959, 'col': 14, 'cols': [2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 12: {'m1': 45, 'M1': 767, 'm2': 793, 'M2': 967, 'col': 16, 'cols': [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 13: {'m1': 44, 'M1': 300, 'm2': 311, 'M2': 962, 'col': 19, 'cols': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 14: {'m1': 25, 'M1': 119, 'm2': 140, 'M2': 954, 'col': 13, 'cols': [2, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19]},
 15: {'m1': 38, 'M1': 389, 'm2': 410, 'M2': 974, 'col': 15, 'cols': [2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 16: {'m1': 29, 'M1': 697, 'm2': 714, 'M2': 968, 'col': 0, 'cols': [15]},
 17: {'m1': 32, 'M1': 55, 'm2': 65, 'M2': 968, 'col': 18, 'cols': [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 18: {'m1': 39, 'M1': 642, 'm2': 660, 'M2': 955, 'col': 4, 'cols': [2, 11, 14, 15, 16]},
 19: {'m1': 41, 'M1': 567, 'm2': 578, 'M2': 959, 'col': 11, 'cols': [2, 6, 7, 8, 10, 11, 14, 15, 16, 17, 18, 19]}}

谢谢

标签: pythonsortingdictionarytuples

解决方案


您可以使用以下命令指定排序键key

dict(sorted(d.items(), key=lambda x: x[1]['col']))

输出:

{16: {'m1': 29, 'M1': 697, 'm2': 714, 'M2': 968, 'col': 0,  'cols': [15]},
 10: {'m1': 43, 'M1': 804, 'm2': 827, 'M2': 955, 'col': 1,  'cols': [11, 15]},
  7: {'m1': 44, 'M1': 721, 'm2': 731, 'M2': 960, 'col': 2,  'cols': [11, 15, 16]},
  8: {'m1': 29, 'M1': 826, 'm2': 846, 'M2': 958, 'col': 3,  'cols': [11, 14, 15, 16]},
 18: {'m1': 39, 'M1': 642, 'm2': 660, 'M2': 955, 'col': 4,  'cols': [2, 11, 14, 15, 16]},
  4: {'m1': 39, 'M1': 293, 'm2': 299, 'M2': 964, 'col': 5,  'cols': [2, 6, 11, 14, 15, 16]},
  0: {'m1': 32, 'M1': 174, 'm2': 190, 'M2': 967, 'col': 6,  'cols': [2, 6, 11, 14, 15, 16, 18]},
  3: {'m1': 41, 'M1': 85,  'm2': 104, 'M2': 962, 'col': 7,  'cols': [2, 6, 11, 14, 15, 16, 18, 19]},
  2: {'m1': 35, 'M1': 595, 'm2': 621, 'M2': 972, 'col': 8,  'cols': [2, 6, 10, 11, 14, 15, 16, 18, 19]},
  5: {'m1': 44, 'M1': 192, 'm2': 215, 'M2': 962, 'col': 9,  'cols': [2, 6, 7, 10, 11, 14, 15, 16, 18, 19]},
  1: {'m1': 50, 'M1': 580, 'm2': 588, 'M2': 960, 'col': 10, 'cols': [2, 6, 7, 10, 11, 14, 15, 16, 17, 18, 19]},
 19: {'m1': 41, 'M1': 567, 'm2': 578, 'M2': 959, 'col': 11, 'cols': [2, 6, 7, 8, 10, 11, 14, 15, 16, 17, 18, 19]},
  6: {'m1': 46, 'M1': 238, 'm2': 255, 'M2': 963, 'col': 12, 'cols': [2, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19]},
 14: {'m1': 25, 'M1': 119, 'm2': 140, 'M2': 954, 'col': 13, 'cols': [2, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19]},
 11: {'m1': 48, 'M1': 273, 'm2': 291, 'M2': 959, 'col': 14, 'cols': [2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 15: {'m1': 38, 'M1': 389, 'm2': 410, 'M2': 974, 'col': 15, 'cols': [2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 12: {'m1': 45, 'M1': 767, 'm2': 793, 'M2': 967, 'col': 16, 'cols': [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
  9: {'m1': 49, 'M1': 525, 'm2': 543, 'M2': 953, 'col': 17, 'cols': [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 17: {'m1': 32, 'M1': 55,  'm2': 65,  'M2': 968, 'col': 18, 'cols': [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]},
 13: {'m1': 44, 'M1': 300, 'm2': 311, 'M2': 962, 'col': 19, 'cols': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}
 }

推荐阅读