【问题标题】:Python: Print first dictionary value for all keys on first line, second on second etcPython:在第一行打印所有键的第一个字典值,在第二行打印第二个等
【发布时间】:2015-09-06 08:07:47
【问题描述】:

我有一本这样的字典:

mapping = {
    'a':['_________','_________','_________'],
    'b':['---------','---------','---------'],
    'c':['=========','=========','========='],
}

我需要打印第一行打印的值列表中的所有第一项,第二行打印所有第二个值,第三行打印所有第三个值。像这样:

_________---------=========
_________---------=========
_________---------=========

所有项目的字符长度相同,所有列表的项目数量相同。

我有一个以正确顺序获取键的字母列表,我只是不确定如何打印这些值。我可以打印所有第一个项目:

counter = 0
for l in letters:
      for value in mapping[l]:
        print(value[counter],end="")

我将如何创建上面的输出?

【问题讨论】:

  • 不要把你的字典命名为dict。此外,您的字典中的元素之间缺少逗号。

标签: python python-3.x dictionary


【解决方案1】:

您可以“转置”您的列表;列表中的列必须变成行。

一旦您的列表按正确的顺序排列,zip() function 可以do the transposing for you:

right_order = (mapping[l] for l in letters)
transposed = zip(*right_order)
for column in transposed:
    print(*(column), sep='')

演示:

>>> mapping = {
...     'a':['_________','_________','_________'],
...     'b':['---------','---------','---------'],
...     'c':['=========','=========','========='],
... }
>>> letters = 'abc'
>>> right_order = (mapping[l] for l in letters)
>>> transposed = zip(*right_order)
>>> for column in transposed:
...     print(*(column), sep='')
... 
_________---------=========
_________---------=========
_________---------=========

另一种方法是通过对其中一个列表中的元素数量使用外部循环来使用行计数器:

for rownum in range(len(mapping['a'])):
    for l in letters:
        print(mapping[l][rownum], end='')
    print()

【讨论】:

    【解决方案2】:

    您必须确保对字典进行排序,然后遍历它并打印内容。

    length = len(d['a'])
    
    for i in range(length):
        for key in sorted(d.keys()):
            print(d[key][i], end = '')
        print()
    

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      相关资源
      最近更新 更多