Ram*_*h R 5 python dictionary list
我有字典列表
vals = [
{'tmpl_id': 67, 'qty_available': -3.0, 'product_id': 72, 'product_qty': 1.0},
{'tmpl_id': 67, 'qty_available': 5.0, 'product_id': 71, 'product_qty': 1.0}
{'tmpl_id': 69, 'qty_available': 10.0, 'product_id': 74, 'product_qty': 1.0}
]
from operator import itemgetter
getvals = operator.itemgetter('tmpl_id')
val.sort(key=getvals)
result = []
for k, g in itertools.groupby(val, getvals):
result.append(g.next())
val[:] = result
Run Code Online (Sandbox Code Playgroud)
我想删除重复值 (tmpl_id) 并且还基于 qty_available 较小或为负
输出将类似于:
vals = [
{'tmpl_id': 67, 'qty_available': 5.0, 'product_id': 71, 'product_qty': 1.0}
{'tmpl_id': 69, 'qty_available': 10.0, 'product_id': 74, 'product_qty': 1.0}
]
Run Code Online (Sandbox Code Playgroud)
from collections import Counter
vals = [{'tmpl_id': 67, 'qty_available': -3.0, 'product_id': 72, 'product_qty': 1.0},
{'tmpl_id': 67, 'qty_available': 5.0, 'product_id': 71, 'product_qty': 1.0},
{'tmpl_id': 69, 'qty_available': 10.0, 'product_id': 74, 'product_qty': 1.0},]
k = [x['tmpl_id'] for x in vals]
new_vals=[]
for i in Counter(k):
all = [x for x in vals if x['tmpl_id']==i]
new_vals.append(max(all, key=lambda x: x['qty_available']))
>>> new_vals
[
{'product_qty': 1.0, 'qty_available': 5.0, 'tmpl_id': 67, 'product_id': 71},
{'product_qty': 1.0, 'qty_available': 10.0, 'tmpl_id': 69, 'product_id': 74}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |