我如何概括从字典键中获取值?

How can I generalize getting values from a dictionary key?

我有一个字典列表,例如:

[ {'Type': 'Water', 'Level': '8'}, {'Type': 'Fire', 'Level': '2'}, {'Type': 'Fire', 'Level': '8'}, ... ]

我有这段代码,基本上将其打印为 table:

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") 的数量进行硬编码。

幸运的是,生成 table 的 headers 是泛化的,但是我还不能泛化打印键值和表格数量(如我的第二个循环所示)。

如果所有词典都有相同的键,您可以将 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'

你可以把 table 的第一行写成

string_table = '\t'.join(keys) + '\n'

您可以使用 python format 创建表格。

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()))