将列表或词典打印到列中

2024-06-13 14:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究如何将数据打印到列中。我还没有找到一种优雅的方法来使用字典(键)或列表(将字典中的键放入列表)来实现这一点。你知道吗

我研究了迭代每个键并打印它,但是这不起作用,因为你不能使用映射。我试过使用一个列表,并使用string formatting打印列表中的每个项目,但正如您想象的那样,我从每个列表项目中获得每个字符的空格,我似乎无法使用.join。我能得到的最接近我想要的答案是来自Aaron Digullahere的答案。但是,这不会按字母顺序打印列表项。我不敢相信没有一个简单优雅的方法可以做到这一点?你知道吗

上述答案的方法

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)

Tags: 数据项目方法key答案l1列表string
2条回答

下面是一个更通用的版本,允许您指定列数:

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

可以使用排序,请尝试:

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)

相关问题 更多 >