Я искал для достижения подобной вещи и использовал ответ, предоставленный @Ankur, с небольшими изменениями, поскольку мне нужно было снова скрыть столбцы после экспорта.
Код выглядит следующим образом:
excelExport(e) {
Spa.startLoading(); // loading overlay to hide the columns showing then hiding again
var columns = e.sender.columns;
var hiddenColumnNumbers = [];
if (!exportFlag) {
for (let i = 0; i < columns.length; i++) {
if (columns[i].hidden) {
e.sender.showColumn(i);
hiddenColumnNumbers.push(i);
}
}
e.preventDefault();
exportFlag = true;
setTimeout(() => {
e.sender.saveAsExcel();
for (let j = 0; j < columns.length; j++) {
if (hiddenColumnNumbers.indexOf(j) > -1) {
e.sender.hideColumn(j);
}
}
Spa.stopLoading(); // hide loading overlay
});
} else {
for (let k = 0; k < columns.length; k++) {
if (columns[k].hidden)
e.sender.hideColumn(k);
}
exportFlag = false;
Spa.stopLoading(); // hide loading overlay
}
},
Вы не можете редактировать tuples
- они являются неизменяемыми. Вы можете использовать lists
и затем преобразовать все обратно в tuples
:
data = [('a', 'b'), ('a', 'c'),('d','f')]
new_data = []
for d in data # loop over your data
if new_data and new_data[-1][0] == d[0]: # if something in new_data and 1st
new_data[-1].extend(d[1:]) # ones are identical: extend
else:
new_data.append( [a for a in d] ) # not same/nothing in: add items
print(new_data) # all are lists
new_data = [tuple(x) for x in new_data]
print(new_data) # all are tuples again
Вывод:
[['a', 'b', 'c'], ['d', 'f']] # all are lists
[('a', 'b', 'c'), ('d', 'f')] # all are tuples again
Вот один из способов сделать это. Для эффективности мы построим dict
с первым значением в качестве ключа. Мы сохраняем значения в том порядке, в котором они отображаются (и кортежи в их первоначальном порядке, если вы используете Python> = 3.7 - в противном случае вам придется использовать collections.OrderedDict
)
def join_by_first(sequences):
out = {}
for seq in sequences:
try:
out[seq[0]].extend(seq[1:])
except KeyError:
out[seq[0]] = list(seq)
return [tuple(values) for values in out.values()]
join_by_first([('a', 'b'), ('a', 'c'),('d','f')])
# [('a', 'b', 'c'), ('d', 'f')]