如何检查列表中列表的唯一性?

时间:2018-01-11 12:39:18

标签: python list

我有这些数据:

[[prodcutname,price_rate,price,quantity]]

[['phone', '500', 450.0, 1], ['phone', '500', 2250.0, 5], ['camera', '200', 1080.0, 6], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1],['laptop', '600', 540.0, 1]]

现在,我需要做的是创建一个只包含唯一元素(产品)的新列表,并添加同一产品的其他值并将它们放入列表中。 理想的输出看起来像:

[['phone','500',2700,6],['camera','220',1080,6],....]

我尝试使用 -

这样做
unique_list = ['phone', '500', 450.0, 1]

big_list = []
mylist = []

for i in range(len(larger_list)):
    for j in range(1,len(larger_list)):
        if(larger_list[i][0]==larger_list[j][0]):
            # Getting the sum or prices and number
            #Sum of price
            larger_list[j][2]=larger_list[i][2]+larger_list[j][2]

            #Sum of number
            larger_list[j][3]=larger_list[i][3]+larger_list[j][3]

            #Adding into a new list
            unique_list[0]=larger_list[i][0]
            unique_list[1]=larger_list[i][1]
            unique_list[2]=larger_list[j][2]
            unique_list[3]=larger_list[j][3]

            mylist.append(unique_list)
            big_list.append(mylist)
            mylist = []

return big_list

但遇到很多错误无济于事。我甚至尝试将它们放入字典中。我如何在Python中执行此操作?

3 个答案:

答案 0 :(得分:3)

Python中的词典意味着与Dictionary这个词完全相同。这意味着,您可以直接使用关键字轻松查找任何Value的{​​{1}}。遗憾的是,keyword无法使用此列表,因为列表已list已编入索引。因此,建议首先将列表转换为字典,原因有两个:
1:将给定数据更轻松地映射到numerically键。
2:处理数据值以获得所需结果。

作为Individual显示的结果,现在可以使用密钥更轻松地访问任何数据(即使在一个循环中)。例如,Print,您可以简单地执行:
to get the Price of Phones这比执行以下操作要容易得多:dictList['phone']['price']这实际上并不那么直观....

flatList[0][2]

但是,如果出于任何原因需要将数据作为列表,那么使用简单的product_list = [ ['phone', '500', 450.0, 1], ['phone', '500', 2250.0, 5], ['camera', '200', 1080.0, 6], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1] ] # CREATE A LIST OF DICTIONARY FROM GIVEN DATA FOR EASIER MAPPING item = ["product_name", "price_rate", "price", "quantity"] dictList = {} for data in product_list: if data[0] not in dictList: dictList[data[0]] = dict(zip(item, data)) else: tmpD = dict(zip(item, data)) dictList[data[0]]["price"] = float(dictList[data[0]]["price"]) + float(tmpD['price']) dictList[data[0]]["quantity"] = float(dictList[data[0]]["quantity"]) + float(tmpD['quantity']) # dictList[data[0]]["price_rate"] = float(dictList[data[0]]["price_rate"]) + float(tmpD['price_rate']) print(dictList) ## PRINTS: ## { ## 'phone': {'product_name': 'phone', 'price_rate': '500', 'price': 2700.0, 'quantity': 6.0}, ## 'camera': {'product_name': 'camera', 'price_rate': '200', 'price': 1080.0, 'quantity': 6}, ## 'laptop': {'product_name': 'laptop', 'price_rate': '600', 'price': 1620.0, 'quantity': 3.0} ## } 就可以轻松实现这一点:

list composition

答案 1 :(得分:1)

您可以在Python3中使用itertools.groupby

import itertools
s = [['phone', '500', 450.0, 1], ['phone', '500', 2250.0, 5], ['camera', '200', 1080.0, 6], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1],['laptop', '600', 540.0, 1]]
new_s = [(a, list(b)) for a, b in itertools.groupby(sorted(s, key=lambda x:x[0]), key=lambda x:x[0])]
final_s = [[a, b[0][1], *list(map(sum, list(zip(*[i[2:] for i in b]))))] for a, b in new_s]

输出:

[['camera', '200', 1080.0, 6], ['laptop', '600', 1620.0, 3], ['phone', '500', 2700.0, 6]]

答案 2 :(得分:0)

您可以构建dict

>>> l
[['camera', '200', 1080.0, 6], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1], ['laptop', '600', 540.0, 1], ['phone', '500', 450.0, 1], ['phone', '500', 2250.0, 5]]
>>> for i in l:
...     if i[0] in d:
...             d[i[0]].append(i[1:])
...     else:
...             d[i[0]]=[i[1:]]
... 
>>> d
{'phone': [['500', 450.0, 1], ['500', 2250.0, 5]], 'laptop': [['600', 540.0, 1], ['600', 540.0, 1], ['600', 540.0, 1]], 'camera': [['200', 1080.0, 6]]}