以表格格式打印列表

时间:2014-05-01 19:45:02

标签: python printing

我指的是这里的帖子Pretty printing a list in a tabular format

mylist = [ ( (12, 47, 4, 574862, 58, 7856), 'AGGREGATE_VALUE1'),
           ( (2, 75, 757, 8233, 838, 47775272785), 'AGGREG2'),
           ( (4144, 78, 78965, 778, 78578, 2), 'AGGREGATE_VALUE3')]

header = ('Price1','Price2','reference','XYD','code','resp','AGGREG values')

longg = dict(zip((0,1,2,3,4,5,6),(len(str(x)) for x in header)))

for tu,x in mylist:
    longg.update(( i, max(longg[i],len(str(el))) ) for i,el in enumerate(tu))
    longg[6] = max(longg[6],len(str(x)))
fofo = ' | '.join('%%-%ss' % longg[i] for i in xrange(0,7))

print '\n'.join((fofo % header,
                 '-|-'.join( longg[i]*'-' for i in xrange(7)),
                 '\n'.join(fofo % (a,b,c,d,e,f,g) for (a,b,c,d,e,f),g in mylist)))

我想用动态替换'\n'.join(fofo % (a,b,c,d,e,f,g) for (a,b,c,d,e,f),g in mylist)))。 例如range1 = ', '.join(map(chr, range(97, 97+7)))给我a,b,c,d,e,f,g

所以该行会显示'\n'.join(fofo % (range1) for (a,b,c,d,e,f),g in mylist)))

但是给了我:

  

TypeError:格式字符串

的参数不足

1 个答案:

答案 0 :(得分:0)

错误是range1是一个字符串,而您希望有变量。您可能会使用类似eval的内容?

所以你可以这样做:

    '\n'.join(fofo % eval(range1) for (a,b,c,d,e,f),g in mylist)

或者为了避免引用几个vars:

    '\n'.join(fofo % (tuple(x[0])+(x[1],)) for x in mylist)

mylist的每个元素都由包含元组和((a,b..), "string")字符串的元组构成。 因此,如果您考虑包含此类数据的x,tuple(x[0])指定第一个元组,而(x[1],)使用单个元素(即字符串)创建元组。最后tuple(x[0])+(x[1],)将只创建一个包含所有元素的元组:

    x = ((0, 1, 2), "a")
    tuple(x[0])+(x[1],)  #is equivalent to (0, 1, 2, "a")

这将与((0, 1, 2, 3, 4), "a")或内部元组中的任意数量的元素一起使用。