我有一个字典列表,例如:
[{"类型":"水","水平":"8"},{"类型":"火","水平":' 2 '},{"类型":"火","水平":"8"},…)
我有这段代码,基本上把它打印成一个表:
my_list_of_dics = [ {'Type': 'Water', 'Level': '8'}, {'Type': 'Fire', 'Level': '2'}, {'Type': 'Fire', 'Level': '8'}]
#Initialize string
string_table = ""
#Print headers
for key in my_list_of_dics[0]:
string_table += key + "t"
#Jump line
string_table += "n"
#Print values (rows), matching the header order and tabulations between each value and jump a line after each row
for row in my_list_of_dics:
string_table += row['Type'] + "t" + row['Level'] + "n"
print(string_table)
打印:
Type Level Water 8 Fire 2 Fire 8
它按我想要的方式工作,但是我必须硬编码键的名称和每个键之间的表数(+"t"),当打印出来时。
幸运的是,生成表头是一般化的,但是我还不能一般化打印键的值和表的数量(如我的第二个循环所示)。
如果所有字典都有相同的键,您可以将for
循环中的代码行替换为:
string_table += 't'.join(row[key] for key in my_list_of_dics[0]) + 'n'
注意,您可以通过定义
来优化它。keys = list(my_list_of_dics[0].keys())
那么你可以直接用
string_table += 't'.join(row[key] for key in keys) + 'n'
,你可以用
作为表的第一行string_table = 't'.join(keys) + 'n'
您可以使用pythonformat
创建表
my_list_of_dics = [
{"Type": "Water", "Level": "8"},
{"Type": "Fire", "Level": "2"},
{"Type": "Fire", "Level": "8"},
]
print("{:<10} {:<10}".format("Type", "Level"))
for val in my_list_of_dics:
print("{:<10} {:<10}".format(val["Type"], val["Level"]))
将给我们
Type Level
Water 8
Fire 2
Fire 8
更广义形式
my_list_of_dics = [
{"Type": "Water", "Level": "8"},
{"Type": "Fire", "Level": "2"},
{"Type": "Fire", "Level": "8"},
]
get_keys = list(my_list_of_dics[0].keys())
fmt = "{:<10}" * len(get_keys)
print(fmt.format(*get_keys))
for val in my_list_of_dics:
print(fmt.format(*val.values()))