gpt4 book ai didi

python - 如何组合元组列表中的唯一值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:29 25 4
gpt4 key购买 nike

我有 2 个列表(来自 excel 文件),一个包含产品名称,另一个包含数字。

示例 Excel 文件:

Example Excel Document

这意味着我有 2 个列表 - 用 xlrd.col_values() 撕开:

products = ['Product1','Product1','Product1','Product2','Product2','Product2']
values = [1,-1,0,2,4,-1]

我想要的最终结果是这样的:

format = [['Product1', [1,-1,0]],['Product2', [2,4,-1]]]

我尝试使用 zip() 来做到这一点:

zip_list = list(zip(products, values))

但是这返回了:

[('Product1', 1), ('Product1', -1), ('Product1', 0), ('Product2', 2), ('Product2', 4), ('Product2', -1)]

有人知道如何获得所需的格式吗? - 我正在使用 python3。

最佳答案

您可以使用字典(理想:collections.defaultdict)来收集您的数据,然后使用dict.items() 来创建您的格式:

from collections import defaultdict

products = ['Product1','Product1','Product1','Product2','Product2','Product2']
values = [1,-1,0,2,4,-1]

d = defaultdict(list)
# accumulate your data
for prod,val in zip(products,values):
d[prod].append(val)

print(d)

# convert dict.items() to your wanted format
format = [list(i) for i in d.items()]
print(format)

输出:

defaultdict(<class 'list'>, {'Product1': [1, -1, 0], 'Product2': [2, 4, -1]})

[['Product1', [1, -1, 0]], ['Product2', [2, 4, -1]]]

使用 defaultdict(list) 优于 dict.setdefault(key,[]) 或使用 try: except: 或测试是否key in dict 因为它比任何其他方法总体上更快(内置优化)。

独库:


您还可以利用 itertools.groupby() wich 对排序后的数据进行操作(您的已排序)以获得相同的结果:

from itertools import groupby

grped = groupby( zip(products,values), lambda x:x[0]) # group by 1st value

l = []
for g in grped:
l.append([g[0],list(val for _,val in g[1])]) # extract 2nd value from grouping

print(l) # [['Product1', [1, -1, 0]], ['Product2', [2, 4, -1]]]

在此列表上使用 groupby 会创建相同的分区,因为它已排序 - 如果未排序,您会得到不同的结果。

关于python - 如何组合元组列表中的唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com