我正在循环脚本中的一个函数,该函数返回列表列表,例如在第一次迭代中我得到以下列表列表:
list1 = [['Farm05', 'Red Hat Enterprise Linux, Standard', 1], ['Farm05', 'Red Hat Enterprise Linux, Standard', 1], ['Farm05', 'Red Hat Enterprise Linux, Standard', 1], ['Farm05', 'Red Hat Enterprise Linux, Premium', 1], ['Farm05', 'Red Hat nterprise Linux,Premium', 1]]
我想要得到的是一个包含不同项目的列表,以及每个订阅的数字摘要,即标准列表 = 1+1 =2,高级列表 1+1=2
list2 = ['Farm05','Red Hat Enterprise Linux, Standard',2]
list3 = ['Farm05','Red Hat Enterprise Linux, Premium',2]
我尝试过这种方法,但它没有删除重复项,而且看起来不干净。如何通过列表理解来实现它?
new_list = []
for i in Farm:
farm = i[0]
subscription = i[1]
count = i[2]
count += count
if farm not in list1 or subscription not in list1 or count not in list1:
new_list.extend(farm,subscription,count)
最佳答案
您需要的是groupby
from itertools
。以下是如何使用它:
from itertools import groupby
res = [[*i, sum(k[-1] for k in g)] for i, g in groupby(list1, key=lambda x: x[:-1])]
对于您提供的示例输入1打印:
[['Farm05', 'Red Hat Enterprise Linux, Standard', 3], ['Farm05', 'Red Hat Enterprise Linux, Premium', 2]]
<小时/>
1必须更正输入;它包含拼写错误。
关于python创建带有变量赋值且不重复的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660878/