按多个值排序,可以是None

时间:2016-08-22 17:45:28

标签: python sorting

我有一个字典列表(实际上是一个包含字典的对象列表),像这样,代表一个表:

rows = [
  { '11': 14,  '12':  0,  '13':  0,  '14': 20 },
  {                       '13':  8            },
  { '11':  7,                                 },
  { '11':  2,                        '14':  2 },
  {            '12':  2,  '13':  2            },
  { '11':  3,                        '14':  3 },
  { '11':  1,                        '14':  1 },
  {                       '13':  5            },
  { '11':  8,                                 },
  { '11':  0,                        '14':  0 },
  { '11':  9,                                 },
  {                                  '14': 10 },
  {                       '13': 19            },
  {                                  '14': 12 },
  {                       '13': 15            },
  {            '12':  3,  '13':  3            }
]

我想按表格中的每一列对它们进行排序:

[
  { '11':  0,                        '14':  0 },
  { '11':  1,                        '14':  1 },
  { '11':  2,                        '14':  2 },
  { '11':  3,                        '14':  3 },
  {                                  '14': 10 },
  {                                  '14': 12 },
  { '11':  7                                  },
  { '11':  8                                  },
  { '11':  9                                  },
  { '11': 14,  '12':  0,  '13':  0,  '14': 20 },
  {            '12':  2,  '13':  2            },
  {            '12':  3,  '13':  3            },
  {                       '13':  5            },
  {                       '13':  8            },
  {                       '13': 15            },
  {                       '13': 19            }
]

有一些可能的“正确”订单,但这是其中之一。

我已经看过并尝试了各种解决方案,但它们似乎都涉及将None放在列表的开头或结尾,这是我不想要的。例如:

rows.sort(key=lambda r: [r.get(c, 0) for c in ['11', '12', '13', '14']])

有些物品无法比较(因为它们没有共同的钥匙),但比较功能无法返回'我不知道',可以吗?

我使用的是Python 3.5,但与2.7和3.4保持兼容会很不错。

0 个答案:

没有答案