2016-01-23 136 views
0

我有一个特定的列表,我需要对它进行排序。排序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为好。

+0

请注意,您所需的输出是不完全的'“序列”排序'值,而是取其整数表示。 – TigerhawkT3

+0

可能的重复[如何通过Python中的字典的值对字典列表进行排序?](http://stackoverflow.com/questions/72899/how-do-i-sort-a-list-of-dictionaries -by-the-values-of-the-python) – TessellatingHeckler

回答

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}] 
+0

排序后。如何完全删除序列键字段? – user32876

+0

'val for vals: val.pop('sequence',None)' –