以漂亮的“表格”格式化元组数组
假设我有一个包含元组的数组,长得像这样:
[('url#id1', 'url#predicate1', 'value1'),
('url#id1', 'url#predicate2', 'value2'),
('url#id1', 'url#predicate3', 'value3'),
('url#id2', 'url#predicate1', 'value4'),
('url#id2', 'url#predicate2', 'value5')]
我想把它转换成一个好看的二维数组,这样我就可以通过Django在我的页面上直接显示它。
这个表格看起来会是这样的:
[['', 'predicate1', 'predicate2', 'predicate3'],
['id1', 'value1', 'value2', 'value3'],
['id2', 'value4', 'value5', '']]
你会注意到,每个元组的第二个元素变成了表格的“列标题”,而且现在我们有了带有ID和列值的行。
你会怎么做呢?当然,如果你有比我给出的表格示例更好的主意,我很乐意听听你的想法 :)
现在我正在生成一个字典的字典,并在Django中显示它。但是因为我的键值对在字典中的顺序并不总是相同,所以它无法正确显示我的数据。
谢谢!
2 个回答
0
你的字典里面的字典可能是个不错的思路。在你创建这个字典的同时,可以维护一个ID列表和一个条件列表。这样,你就能记住顺序,并通过循环这些列表来构建表格。
使用 zip
函数处理你的初始数组,会得到三个列表:一个是ID列表,一个是条件列表,还有一个是值列表。
为了去掉重复的项,可以试试 reduce
函数:
list_without_duplicates = reduce(
lambda l, x: (l[-1] != x and l.append(x)) or l, list_with_duplicates, [])
0
好的,
最后我想出了这段代码:
columns = dict()
columnsTitles = []
rows = dict()
colIdxCounter = 1 # Start with 1 because the first col are ids
rowIdxCounter = 1 # Start with 1 because the columns titles
for i in dataset:
if not rows.has_key(i[0]):
rows[i[0]] = rowIdxCounter
rowIdxCounter += 1
if not columns.has_key(i[1]):
columns[i[1]] = colIdxCounter
colIdxCounter += 1
columnsTitles.append(i[1])
toRet = [columnsTitles]
for i in range(len(rows)):
toAppend = []
for j in range(colIdxCounter):
toAppend.append("")
toRet.append(toAppend)
for i in dataset:
toRet[rows[i[0]]][columns[i[1]]] = i[2]
for i in toRet:
print i
如果你有任何意见或者改进的建议,请随时告诉我哦 :)