我如何概括从字典键中获取值?
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()))
我有一个字典列表,例如:
[ {'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()))