2017-02-09 109 views
0

我試圖在單獨的行上打印多個字典,其中包含相同的鍵,但每次都有不同的值。這些值可以不同,每次打印字典時,它可能會顯得雜亂;因爲鑰匙每次都在不同的地方。例如:如何每次打印具有相同列的鍵的字典?

{0: 10, 1: 5, 2: 2, 3: 4, 4: 1, 5: 1, 6: 0, 7: 0, 8: 0, 9: 0, 10: 1} 
{0: 309, 1: 156, 2: 76, 3: 36, 4: 22, 5: 6, 6: 4, 7: 5, 8: 1, 9: 0, 10: 1} 
{0: 478, 1: 216, 2: 125, 3: 57, 4: 37, 5: 9, 6: 2, 7: 2, 8: 2, 9: 0, 10: 1} 
{0: 1287, 1: 717, 2: 332, 3: 165, 4: 94, 5: 26, 6: 15, 7: 9, 8: 8, 9: 4, 10: 1} 
{0: 104, 1: 53, 2: 24, 3: 17, 4: 6, 5: 4, 6: 0, 7: 1, 8: 0, 9: 1, 10: 1} 

如何打印字典的方式是在每次打印字典時鍵都在同一列上?這樣,字典每次都會有相同的長度,並且看起來更整潔。

回答

1

一種方法是學習數據框架接口,例如PANDAS,以便您可以將這些值放入帶標籤的列中。這可能是最好的方法。

如果您需要在Python中使用您自己的編碼來完成此操作,我建議您編寫一個漂亮的打印機,將每個元素按順序排列,並將其打印在格式良好的列中(例如,帶\ t字符的字符) ,並通過蠻力添加大括號。例如:

print '{', 
for key in range(key_min, key_max+1): 
    print key, ':', dict[key], ',\t', 
print '}' 

這樣做一行。這是否令人滿意?您也可以使用整個生產線的formatted print;我不確定您想花多少時間學習輸出格式。

+0

嗨。我遵循了你對熊貓數據框架的建議。輸出看起來不錯。 –

2

由於dict在本質上是非訂購的,因此無法打印訂購內容。爲了達到此目的,您可以根據密鑰對dict的內容進行排序,並生成類似於字典repr的字符串。例如:

for item in my_list: 
    print('{%s}' % ', '.join('%s: %s' % (k, v) for k, v in sorted(item.items()))) 

# which prints: 
# {0: 10, 1: 5, 2: 2, 3: 4, 4: 1, 5: 1, 6: 0, 7: 0, 8: 0, 9: 0, 10: 1} 
# {0: 309, 1: 156, 2: 76, 3: 36, 4: 22, 5: 6, 6: 4, 7: 5, 8: 1, 9: 0, 10: 1} 
# {0: 478, 1: 216, 2: 125, 3: 57, 4: 37, 5: 9, 6: 2, 7: 2, 8: 2, 9: 0, 10: 1} 
# {0: 1287, 1: 717, 2: 332, 3: 165, 4: 94, 5: 26, 6: 15, 7: 9, 8: 8, 9: 4, 10: 1} 
# {0: 104, 1: 53, 2: 24, 3: 17, 4: 6, 5: 4, 6: 0, 7: 1, 8: 0, 9: 1, 10: 1} 

其中my_listdict作爲列表:

my_list = [{0: 10, 1: 5, 2: 2, 3: 4, 4: 1, 5: 1, 6: 0, 7: 0, 8: 0, 9: 0, 10: 1}, 
      {0: 309, 1: 156, 2: 76, 3: 36, 4: 22, 5: 6, 6: 4, 7: 5, 8: 1, 9: 0, 10: 1}, 
      {0: 478, 1: 216, 2: 125, 3: 57, 4: 37, 5: 9, 6: 2, 7: 2, 8: 2, 9: 0, 10: 1}, 
      {0: 1287, 1: 717, 2: 332, 3: 165, 4: 94, 5: 26, 6: 15, 7: 9, 8: 8, 9: 4, 10: 1}, 
      {0: 104, 1: 53, 2: 24, 3: 17, 4: 6, 5: 4, 6: 0, 7: 1, 8: 0, 9: 1, 10: 1} 
      ] 
相關問題