假设我有一组看起来像这样的元组:
[('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')]
我希望能够返回一个漂亮的2D数组,以便能够通过django在我的页面中“显示”它。
表格看起来像这样:
[['', 'predicate1', 'predicate2', 'predicate3'],
['id1', 'value1', 'value2', 'value3'],
['id2', 'value4', 'value5', '']]
你会注意到每个元组的第二项成为表“列的标题”,我们现在有了包含id和列值的行。
你会怎么做?当然,如果你有更好的想法,而不是使用我给出的表格示例,我会很高兴你的想法:)
现在我正在生成dict的dict并在django中显示。但是作为我的密钥对,我的dicts中的值并不总是相同的顺序,那么它无法正确显示我的数据。
谢谢!
答案 0 :(得分:0)
你的dict dict可能是在正确的轨道上。在创建dict的dict时,您还可以维护一个id列表和一个谓词列表。这样,您可以通过循环遍历这些列表来记住排序并构建表。
使用初始数组上的zip
函数将给出三个列表:id列表,谓词列表和值列表。
要删除重复项,请尝试reduce
函数:
list_without_duplicates = reduce(
lambda l, x: (l[-1] != x and l.append(x)) or l, list_with_duplicates, [])
答案 1 :(得分: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
请不要犹豫,评论/改进它:)