将一组元组 ('Id', 'row 1'), ('Id', 'row 2') 转换为 List['Id',['row 1', 'row2'] 在 Python

Convert set of Tuples ('Id', 'row 1'), ('Id', 'row 2') to List['Id',['row 1', 'row2'] in Python

下午好,

如标题所述,我正在尝试转换一组在第一个位置具有重复值但在第二个位置不同的元组。

我确信有一个非常简单的方法来构建这个列表object,但我对这门语言还很陌生,而且我正在努力这样做。

我尝试制作字典,但发现字典需要唯一键,否则原始值将被覆盖。

这个转换的目的是post这些记录通过id传给smartsheetapi。我想遵循他们的批量处理建议,只对每个 n 记录执行一次 sheet,而不是对 sheet n次。

如有任何建议,我们将不胜感激!

谢谢, 钱宁

我将分两个步骤执行此操作。首先,创建一个字典,其中键是元组的第一个元素,值是共享相同第一个元素的所有 second-elements 的列表。

其次,将键和值交织到适当的列表中。

import itertools

# your initial set of tuples
tuples = {('Id', 'row1'), ('Id', 'row2'), ('Id2', 'row3')}

# create a dict, as above - 
#    key is the first element of tuple
#    value is a list of the second elements of those tuples
dct = {}
for t in tuples:
    dct.setdefault(t[0], []).append(t[1])
print(dct)
# {'Id2': ['row3'], 'Id': ['row1', 'row2']}

# coalesce the dict's keys and values into a list
# we use itertools.chain to make this more straightforward,
# but it's essentially concatenating the tuple elements of dct.items() to
# each other, by using the unpacking operator `*` to provide them individually
# as arguments.
outp = list(itertools.chain(*dct.items()))
print(outp)
# ['Id2', ['row3'], 'Id', ['row1', 'row2']]

这具有线性时间复杂度,因为它恰好遍历输入的每个元素 (tuples) 两次。