首页 > 解决方案 > Python 3 使用列表值遍历字典以显示为表

问题描述

我有一个字典,列表存储为值:

my_dict = {"version":[1, 2, 3],"size":[10, 20, 30],"cost":["£200","£350","£400"],"limit":[44, 53, 62, 71],}

我想做的是遍历所有这些以显示一个表格:

version  size   cost    limit
  1       10    £200     44         
  2       20    £350     53
  3       30    £400     62

我知道我可以使用 zip 功能,例如:

for row in zip(*([key] + (value) for key, value in sorted(my_dict.items()))):
    print(*row)

但我想学习如何在不使用 zip 的情况下迭代这类事情。我已经测试了一些嵌套的 for 循环,但我无法获得我想要的输出!

标签: listloopsdictionarypython-3.5

解决方案


您可以使用此示例来迭代my_dict,但使用zip()更 Pythonic(也更方便):

my_dict = {"version":[1, 2, 3],"size":[10, 20, 30],"cost":["£200","£350","£400"],"limit":[44, 53, 62, 71],}

print(''.join('{:^15}'.format(k) for k in my_dict))

cnt = 0
while True:
    try:
        for k in my_dict:
            print('{:^15}'.format(my_dict[k][cnt]), end='')
        print()
        cnt += 1
    except IndexError:
        break

印刷:

version         size           cost           limit     
   1             10            £200            44       
   2             20            £350            53       
   3             30            £400            62       

编辑:要指定列的顺序,您可以使用operator.itemgetter

my_dict = {"version":[1, 2, 3],"size":[10, 20, 30],"cost":["£200","£350","£400"],"limit":[44, 53, 62, 71],}

from operator import itemgetter

columns = ['version', 'cost', 'limit', 'size']

print(''.join('{:^15}'.format(k) for k in columns))

i = itemgetter(*columns)
for vals in zip(*i(my_dict)):
    print(''.join('{:^15}'.format(v) for v in vals))

印刷:

version         cost           limit          size      
   1            £200            44             10       
   2            £350            53             20       
   3            £400            62             30       

推荐阅读