【问题标题】:Python 3 iterate through dictionary with list values to display as tablePython 3 使用列表值遍历字典以显示为表
【发布时间】:2023-03-18 04:32:01
【问题描述】:

我有一本字典,其中包含存储为值的列表:

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 循环,我无法得到我想要的输出!!

【问题讨论】:

    标签: list loops dictionary python-3.5


    【解决方案1】:

    您可以使用此示例迭代 my_dict,但使用 zip() 更符合 Python 风格(也更方便):

    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       
    

    【讨论】:

    • 太好了,谢谢!对我来说,它似乎以不同的顺序打印列 - 大小、限制、成本、版本。这就是我放弃使用 zip 的原因,因为我无法对列进行排序。我想更pythonic一般有没有办法做到这一点,但也能够对列进行排序?如果有更好的方法来使用该功能,我愿意重新访问 zip :)
    • @JamesPy 我编辑了我的答案。我看到您使用的是 Python3.5 - 该版本中的字典是无序的。在我的示例中,您可以指定要打印的列的顺序。
    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多