我一直在研究如何将数据打印到列中。我无法通过字典(键)或列表(将字典中的键从列表中取出)找到一种优雅的方法。
我已经研究了迭代每个键并打印出来,但是这并不起作用,因为你无法使用映射。我尝试过使用列表并使用string formatting
打印列表中的每个项目,但是您可以想象我从每个列表项中找回每个字符的空格,我似乎无法理解使用.join
。我能够得到的最接近的是Aaron Digulla
here的答案。但是,这不会按字母顺序打印列表项。我不相信有一种简单优雅的方法可以做到这一点吗?
上面讨论的答案方法
l = ['exiv2-devel', 'mingw-libs', 'tcltk-demos', 'fcgi', 'netcdf',
'pdcurses-devel', 'msvcrt', 'gdal-grass', 'iconv', 'qgis-devel',
'qgis1.1', 'php_mapscript']
if len(l) % 2 != 0:
l.append(" ")
split = len(l)/2
l1 = l[0:split]
l2 = l[split:]
for key, value in zip(l1,l2):
print "{0:<20s} {1}".format(key, value)
答案 0 :(得分:2)
您可以使用sort,尝试:
l = ['exiv2-devel', 'mingw-libs', 'tcltk-demos', 'fcgi', 'netcdf',
'pdcurses-devel', 'msvcrt', 'gdal-grass', 'iconv', 'qgis-devel',
'qgis1.1', 'php_mapscript']
l.sort()# Alphabetizes l
if len(l) % 2 != 0:
l.append(" ")
split = len(l)/2
l1 = l[0:split]
l2 = l[split:]
for key, value in zip(l1,l2):
print "{0:<20s} {1}".format(key, value)
答案 1 :(得分:0)
这是一个更通用的版本,可让您指定列数:
def print_in_columns(iterable, cols=2, col_width=20, key=None, reverse=False):
# get items in output order
items = sorted(iterable, key=key, reverse=reverse)
# calculate number of output rows, and pad as needed
rows = (len(items) + cols - 1) // cols
pad = rows * cols - len(items)
items.extend("" for _ in range(pad))
# prepare output template
item_fmt = "{{:{}s}}".format(col_width)
row_fmt = " ".join(item_fmt for _ in range(cols))
# print by row
for r in range(rows):
print(row_fmt.format(*(items[r::rows])))
使用像
files = [
'exiv2-devel', 'mingw-libs', 'tcltk-demos', 'fcgi', 'netcdf',
'pdcurses-devel', 'msvcrt', 'gdal-grass', 'iconv', 'qgis-devel',
'qgis1.1', 'php_mapscript'
]
print_in_columns(files, cols=4, col_width=16)
产生
exiv2-devel iconv netcdf qgis-devel
fcgi mingw-libs pdcurses-devel qgis1.1
gdal-grass msvcrt php_mapscript tcltk-demos