【发布时间】:2021-01-07 19:08:17
【问题描述】:
我有这个用例,我需要在比较值时忽略 sku、targetFlag 和 qualifierFlag,如果列表的任何字典具有除这三个以外的相同值,则应将其聚合为一个字典以及所有这三个键和值。
谁能告诉我我需要做哪些修改或任何其他更好的解决方案才能获得正确的结果。
到目前为止我尝试的解决方案在与上述选项进行比较时只能取一个值:
from collections import OrderedDict
import pandas as pd
d = OrderedDict()
d = (pd.DataFrame(lst)
.groupby(['endDate','storeCode', 'startDate', 'promoName','targetFlag', 'qualifierFlag'])
.sku
.agg(set)
.reset_index()
.to_dict('r'))
lt = [{
"sku":"40428200",
"storeCode":"316",
"endDate":"05445100",
"promoName":"2201:316 SUPER 37100548200",
"startDate":"40505000",
"targetFlag":"0",
"qualifierFlag":"0",
},
{
"sku":"4567",
"storeCode":"316",
"endDate":"05445100",
"promoName":"2201:316 SUPER 37100548200",
"startDate":"40505000",
"targetFlag":"1",
"qualifierFlag":"1",
},
{
"sku":"12345",
"storeCode":"123",
"endDate":"05445100",
"promoName":"2201:316 GRAND 0548200",
"startDate":"40505000",
"targetFlag":"1",
"qualifierFlag":"0",
},
{
"sku":"40428200",
"storeCode":"316",
"endDate":"18840100",
"promoName":"2201:316 AVI 37125790200",
"startDate":"40505000",
"targetFlag":"1",
"qualifierFlag":"0",
}
]
预期的结果会是这样的
[
{'endDate': '05445100',
'promoName': '2201:316 GRAND 37100548200',
'startDate': '40505000',
'storeCode': '123',
'res': [
{
'qualifierFlag': '0',
'sku': '12345',
'targetFlag': '1'
}
]
},
{'endDate': '05445100',
'promoName': '2201:316 SUPER 37100548200',
'startDate': '40505000',
'storeCode': '316',
'res': [
{
'qualifierFlag': '0',
'sku': '40428200',
'targetFlag': '0'
},
{
'qualifierFlag': '1',
'sku': '4567',
'targetFlag': '1'
},
]
},
{'endDate': '18840100',
'promoName': '2201:316 AVI 37125790200',
'startDate': '40505000',
'storeCode': '316',
'res': [
{
'qualifierFlag': '0',
'sku': '40428200',
'targetFlag': '1'
}
]
]
【问题讨论】:
标签: python pandas dictionary lambda itertools