Python:在第一行打印第一个字典值,在第二行打印第二个字典值等

时间:2015-09-06 08:07:48

标签: python python-3.x dictionary

我有一本这样的字典:

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

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

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

所有项目的长度相同,且所有列表的项目数相同。

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

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

我如何创建上面的输出?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

你必须确保你对字典进行排序,然后迭代它并打印东西。

length = len(d['a'])

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