2015-09-06 99 views
0

我有一本字典是这样的:的Python:打印第一部字典值在第一线的所有键,第二对第二等

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

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

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

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

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

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

但我不认为这会工作,因为无处可更新计数器。

任何帮助将不胜感激。 (我使用Python 3,btw)

+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() 
0

您有t o确保你对你的字典进行排序,然后遍历它并打印出东西。

length = len(d['a']) 

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