我想在字典列表中的每个键和值的末尾添加空格。我知道这听起来很奇怪,但是我有一个要求,需要此类词典列表。有什么建议么!

例:

# Original List of dictionary
my_list = [{'Table': 'A', 'Column': 'C1', 'DataType': 'int'},
       {'Table': 'A', 'Column': 'C2', 'DataType': 'varchar'},
       {'Table': 'B', 'Column': 'C3', 'DataType': 'int'}
       ]
# Have another list of dictionary which specifies the space needs to add at the end of each key and value pair.
position_list = [{'Table': 10}, {'Column': 15}, {'DataType': 10}]


因此,在这里我需要在键的末尾及其值后附加10个空格。

# Expected out put (Spaces may not be exact as shown below but expecting something like.)
list = [{'Table             ': 'A           ', 'Column               ': 'C1                  ', 'DataType                ': 'int             '},
       {'Table             ': 'A           ', 'Column               ': 'C2                  ', 'DataType                ': 'varchar         '},
       {'Table             ': 'B           ', 'Column               ': 'C3                   ', 'DataType                ': 'int            '}
       ]


我的字典列表也总是变化,所以my_list和position_list每次都会改变,所以我无法对指定的键和空间进行硬编码。

最佳答案

您可以简单地做到这一点:

from collections import defaultdict
my_list = [{'Table': 'A', 'Column': 'C1', 'DataType': 'int'},
           {'Table': 'A', 'Column': 'C2', 'DataType': 'varchar'},
           {'Table': 'B', 'Column': 'C3', 'DataType': 'int'}]

position_list = [{'Table': 10}, {'Column': 15}, {'DataType': 10}]
positions = defaultdict(lambda : 10)
for d in position_list:
    positions.update(d)

print [{k + ' ' * positions[k] : v + ' ' * positions[v] for k,v in d.items()} for d in my_list]


输出:

[{'DataType          ': 'int          ', 'Table          ': 'A          ', 'Column               ': 'C1          '}, {'DataType          ': 'varchar          ', 'Table          ': 'A          ', 'Column               ': 'C2          '}, {'DataType          ': 'int          ', 'Table          ': 'B          ', 'Column               ': 'C3          '}]


编辑:

如果您希望键和值具有相同的间距,只需使用此键(positions[k]代替postions[v])。

print [{k + ' ' * positions[k] : v + ' ' * positions[k] for k,v in d.items()} for d in my_list]

10-05 23:49