如何每次在相同的列上打印带有键的字典?

How to print a dictionary with keys on identical columns each time?

我试图在不同的行上打印多个字典,它们包含相同的键,但每次都包含不同的值。这些值可能会有所不同,每次打印字典时,它都会显得很乱;因为钥匙每次都在不同的地方。例如:

{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}

每次打印字典时,如何以键位于同一列的方式打印字典?这样,每次字典的长度都相等,因此看起来更整洁。

一种方法是学习 data-frame 接口,例如 PANDAS,这样您就可以将值放入带标签的列中。这可能是最好的方法。

如果您需要使用自己的代码在 Python 中执行此操作,我建议您编写一个 pretty-printer 将每个元素按顺序排列,并将其打印在格式良好的列中(例如,以 \t 字符开头),并通过蛮力添加大括号。例如:

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

那是一排。这令人满意吗?您也可以对整行使用 formatted print;我不确定你想花多少时间学习输出格式。

由于dict本质上是un-ordered,您无法打印订购的内容。为了实现这一点,您可以根据键对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}
          ]