2016-02-03 134 views
0

我有一个字典,其中包含不同长度的字符串键。 我想获得印刷字典时以下结果:如何整齐地打印字典

'short-key'    value1 
'short-key2    value2 
... 
'little-longer-key'  valueXX 
... 
'very-very-long-keeey' valueXXXX 

到现在为止我一直在做这样的事情:

for key,value in dict.iteritems(): 
    print key," "*(80-len(key)),value 

问题:

  1. 我不不喜欢它。似乎并不是pythonic

  2. 80是一个随机选择的通常很大的数字。但有时可能会发生,关键是超过15分钟,因此" "*(80-len(key))没用

回答

1

你将不得不重复两次,以获得最长的密钥的长度。列表理解可以做得更好。我个人的偏好是只对字典的键然后遍历,然后做一个查询:

padded_width = max(len(x) for x in my_dict.iterkeys()) + 1 
for key in my_dict: 
    print(key.ljust(padded_width) + my_dict[key]) 

下面是一个发烧友版本,允许更多的控制权的填充和使用字符串格式化:

SPACE_BETWEEN_KEYS_AND_VALUES = 1 
MINIMUM_PADDING = 10 
padded_width = max(MINIMUM_PADDING, max(len(x) for x in my_dict.iterkeys()) + SPACE_BETWEEN_KEYS_AND_VALUES) 
for key in my_dict: 
    print("{key: <{width}}{value}".format(key=key, width=padded_width, value=my_dict[key])) 

我我个人比较喜欢第一个例子的字符串连接。