对Python字典列表进行排序

2024-05-14 21:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个特定的列表,我需要对它进行排序。你知道吗

[{'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张。你知道吗


Tags: idfalsepackage列表partner排序locationprod
1条回答
网友
1楼 · 发布于 2024-05-14 21:40:41

使用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}]

相关问题 更多 >

    热门问题