我有一个清单,我需要对其进行排序。
[{'inventory_id': 25,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 7,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '10',
'theoretical_qty': 10.0},
{'inventory_id': 25,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 8,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '3',
'theoretical_qty': 15.0},
{'inventory_id': 27,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 9,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '7',
'theoretical_qty': 21.0}]
我需要在'sequence'
关键字段的基础上对这3条记录进行排序。
排序后,列表输出应为:
[{'inventory_id': 25,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 8,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '3',
'theoretical_qty': 15.0},
{'inventory_id': 27,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 9,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '7',
'theoretical_qty': 21.0},
{'inventory_id': 25,
'location_id': 12,
'package_id': False,
'partner_id': False,
'prod_lot_id': False,
'product_id': 7,
'product_qty': 0,
'product_uom_id': 1,
'sequence': '10',
'theoretical_qty': 10.0}]
记录的数量可以变化并且是动态的 现在他们有三个记录,但也可以超过10个。
答案 0 :(得分:3)
使用list.sort()
并指定一个键函数,该函数将返回每个字典中sequence
键的值。这里的关键函数是作为lambda提供的,但它可以是用def
定义的函数。序列看起来像是数字,因此它应该按数字排序,因此int()
转换。最后一点,如果字典缺少sequence
键,则序列被视为0:
vals = [{'theoretical_qty': 10.0, 'product_id': 7, 'sequence': u'10', 'location_id': 12, 'prod_lot_id': False, 'inventory_id': 25, 'package_id': False, 'product_qty': 0, 'product_uom_id': 1, 'partner_id': False}, {'theoretical_qty': 15.0, 'product_id': 8, 'sequence': u'3', 'location_id': 12, 'prod_lot_id': False, 'inventory_id': 25, 'package_id': False, 'product_qty': 0, 'product_uom_id': 1, 'partner_id': False}, {'theoretical_qty': 21.0, 'product_id': 9, 'sequence': u'7', 'location_id': 12, 'prod_lot_id': False, 'inventory_id': 27, 'package_id': False, 'product_qty': 0, 'product_uom_id': 1, 'partner_id': False}]
vals.sort(key=lambda d: int(d.get('sequence', 0)))
from pprint import pprint
pprint(vals)
输出:
[{'inventory_id': 25, 'location_id': 12, 'package_id': False, 'partner_id': False, 'prod_lot_id': False, 'product_id': 8, 'product_qty': 0, 'product_uom_id': 1, 'sequence': u'3', 'theoretical_qty': 15.0}, {'inventory_id': 27, 'location_id': 12, 'package_id': False, 'partner_id': False, 'prod_lot_id': False, 'product_id': 9, 'product_qty': 0, 'product_uom_id': 1, 'sequence': u'7', 'theoretical_qty': 21.0}, {'inventory_id': 25, 'location_id': 12, 'package_id': False, 'partner_id': False, 'prod_lot_id': False, 'product_id': 7, 'product_qty': 0, 'product_uom_id': 1, 'sequence': u'10', 'theoretical_qty': 10.0}]