我有一个很大的列表,包含一系列ID和相关值,极短的版本看起来像这样:
large = [('5501', [(4, 5, 8), (6, -4, -6)]), ('2222', [(2, 4, -5), (1, -15, 4)])]
我的目标是将修改后的'large'(带有附加内容)导出到Excel (每个值都有自己独立的单元格 - 即5501在A1中,4在A2中,5在B2中,8在C2中......第一个空间将在A4等。),如下所示:
输出要求的所需表格
5501
4,5,8
6,-4,-6
'space here'
'Sorted absolutes maxes'
8, 6, 5
'space here'
2222
2,4,-5
1,-15,4
'space here'
'Sorted absolutes maxes'
15, 5, 2
'space here'
我已经能够使用以下代码导出上述所需的表单:
import csv
with open("out1.csv", "wb") as fp:
writer = csv.writer(fp, delimiter=",")
for entry in large:
writer.writerow([entry[0]])
for line in entry[1]:
writer.writerow(line)
writer.writerow([])
然而,它没有必要的排序绝对值(即忽略任何' - '符号)maxes ,就像上面包含的所需形式一样。这是我需要帮助的地方 - 非常感谢。
答案 0 :(得分:2)
首先,您可以通过使用abs
映射元组来获取绝对值
map(abs, entry[1][0])
map(abs, entry[1][1])
然后,您可以先使用zip创建位置对
来获得成对最大值zip(map(abs, entry[1][0]), map(abs, entry[1][1]))
然后再将这些对映射到它们各自的最大值:
map(max, zip(map(abs, entry[1][0]), map(abs, entry[1][1])))
现在您要做的就是将它们从最大值分配到最小值并将它们写入您的文件:
with open("out1.csv", "wb") as fp:
writer = csv.writer(fp, delimiter=",")
for entry in large:
writer.writerow([entry[0]])
for line in entry[1]:
writer.writerow(line)
writer.writerow([])
writer.writerow(['Sorted absolute maxes'])
maxima = map(max, zip(map(abs, entry[1][0]), map(abs, entry[1][1])) )
writer.writerow(sorted(maxima, reverse=True))
writer.writerow([])
这给了我以下输出:
5501
4,5,8
6,-4,-6
Sorted absolute maxes
8,6,5
2222
2,4,-5
1,-15,4
Sorted absolute maxes
15,5,2