У меня есть список, состоящий из элементов кортежа, таких как (id, cost, clicks, views)
, как показано ниже:
statistic_data_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
И я хочу получить идентификатор предмета, который отвечает следующим условиям:
- 1, когда не все
cost
элемента равны 0, получить идентификатор элемента, который cost
является самым низким.
- 2, когда все
cost
элемента равны 0, тогда, если не все clicks
элемента равны 0, получают идентификатор элемента, который clicks
является самым низким.
- 3, когда все
clicks
элемента равны 0, тогда, если не все views
элемента равны 0, получают идентификатор элемента, который views
является самым низким.
# (1)
# input:
[(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
# expected result:
12324 # (whose cost is lowest)
# (2)
# input:
[(12324, 0, 6, 9), (12325, 0, 5, 3), (12326, 0, 7, 2)]
# expected result:
12325 # (whose clicks is lowest when all cost is 0)
# (3)
# input:
[(12324, 0, 0, 9), (12325, 0, 0, 3), (12326, 0, 0, 2)]
# expected result:
12326 # (whose views is lowest when all cost is 0 also clicks)
Как мне получить идентификатор указанного элемента более эффективно?
# My attemp so far
cost_clicks_views_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
len_cost_not_0 = len(list(filter(lambda item: item[1], cost_clicks_views_list)))
len_clicks_not_0 = len(list(filter(lambda item: item[2], cost_clicks_views_list)))
len_views_not_0 = len(list(filter(lambda item: item[3], cost_clicks_views_list)))
if len_cost_not_0:
min_cost_id_list = [ item[0] for item in cost_clicks_views_list if item[1]==min([i[1] for i in cost_clicks_views_list]) ]
print(min_cost_id_list) # [(12324]
else:
if len_clicks_not_0:
min_clicks_id_list = [item[0] for item in cost_clicks_views_list if item[2] == min([i[2] for i in cost_clicks_views_list])]
print(min_clicks_id_list) # [(12325]
else:
if len_views_not_0:
min_views_id_list = [item[0] for item in cost_clicks_views_list if item[3] == min([i[3] for i in cost_clicks_views_list])]
print(min_views_id_list) # [12326]
Любые комментарии приветствуются. большое спасибо.