【问题标题】:Extract the element with maximum KPI in each bag提取每个包中KPI最大的元素
【发布时间】:2022-01-22 07:08:40
【问题描述】:

我有一本字典data1

data1['Cluster']  = Cluster
data1['pond'] = pond
data1['OsId'] = OsId
data1['BrowserId'] = BrowserId
data1['PageId'] = PageId
data1['conversion'] = conversion
data1['volume'] = volume
data1['KPI'] = KPI
data1['items'] = list(range(len(BrowserId)))
data1['num_items'] = len(OsId)

还有五个包:bag1bag2bag3bag4bag5

对于每个袋子,我们会显示这样的元素列表,例如:

Bag 1

OsId 11 Cluster 18 BrowserId 16 PageId 1149586 conversion 189.0 volume 8123.0 KPI 0.0233019197681265
OsId 11 Cluster 7 BrowserId 16 PageId 955764 conversion 499.0 volume 25258.0 KPI 0.0197577963721497
OsId 11 Cluster 9 BrowserId 16 PageId 1109643 conversion 88.0 volume 2649.0 KPI 0.0330472292481987

Bag 2

OsId 11 Cluster 15 BrowserId 16 PageId 1149586 conversion 280.0 volume 11123.0 KPI 0.0251384955395488
OsId 11 Cluster 15 BrowserId 16 PageId 955761 conversion 321.0 volume 13568.0 KPI 0.0236598154502103
OsId 11 Cluster 7 BrowserId 16 PageId 1149586 conversion 109.0 volume 6049.0 KPI 0.0179813483261127

我尝试只为每个包选择具有最大 KPI 值的元素,例如结果将是:

Bag 1

OsId 11 Cluster 9 BrowserId 16 PageId 1109643 conversion 88.0 volume 2649.0 KPI 0.0330472292481987

Bag 2

OsId 11 Cluster 15 BrowserId 16 PageId 1149586 conversion 280.0 volume 11123.0 KPI 0.0251384955395488

我做了这个python代码:

data1 = {}
pond = data['pond']
Cluster = data['Cluster']
OsId = data['OsId']
BrowserId = data['BrowserId']
PageId = data['PageId']
volume = data['VolumePred']
conversion = data['ConversionPred']
KPI = data['KPIPred']

assert len(OsId) == len(BrowserId) == len(PageId) == len(conversion)

data1['Cluster']  = Cluster
data1['pond'] = pond
data1['OsId'] = OsId
data1['BrowserId'] = BrowserId
data1['PageId'] = PageId
data1['conversion'] = conversion
data1['volume'] = volume
data1['KPI'] = KPI
data1['items'] = list(range(len(BrowserId)))
data1['num_items'] = len(OsId)
number_bags = 5 #All have the same capacity of 50 pounds

for j in data1['bags']:
    bag_value = 0
    bag_weight = 0
    bag_volume= 0
    bag_rad = 0
    bag_conversion=0

    print('\n','Bag', j+1 , '\n')
    for i in data1['items']:
        if((x[i,j].solution_value()>0)):
            print('OsId',data1['OsId'][i],
                  'Cluster', data1['Cluster'][i],
                  'BrowserId', data1['BrowserId'][i],
                  'PageId', data1['PageId'][i],
                  'conversion', data1['conversion'][i],
                  'volume', data1['volume'][i],
                  'KPI', data1['KPI'][i]
                 )

你能帮我解决这个问题吗?

【问题讨论】:

  • bags 的字典吗?还是它们是字典列表? data1 与在每个 bag 中查找最大 KPI 值有何关联?
  • 不,只有 data1 是字典。谢谢
  • 包是什么数据结构?如果它们不是字典,它们是列表、元组,我们如何知道哪个数字对应于最大 KPI?

标签: python dictionary


【解决方案1】:

您可以将 lambda 函数与 max 函数一起使用

for bag in bags:
    print(max(bag, key=lambda x:x['KPI']))

# which will give output like:
# ---------------------------
# {'OsId': 11, 'Cluster': 9, 'BrowserId': 16, 'PageId': 1109643, 'conversion': 88.0, 'volume': 2649.0, 'KPI': 0.0330472292481987}
# {'OsId': 11, 'Cluster': 15, 'BrowserId': 16, 'PageId': 1149586, 'conversion': 280.0, 'volume': 11123.0, 'KPI': 0.0251384955395488}

【讨论】:

    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 2022-12-31
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多