我有一本字典:
People={
'name':['john','peter'],
'age':[56,64]
}
输出
'My name is {name[0]},i am {age[0]} old'.format_map(People)
给予
'My name is john,i am 56 old'
我想在循环中使用 format_map 来获取:
'My name is {name[x]},i am {age[x]} old'
对于字典中的每个项目,例如:
'My name is john,i am 56 old'
'My name is peter,i am 64 old'
但是像这样的循环:
['My name is {name[x]},i am {age[x]} old'.format_map(People) for x in range(0,len(People['name']))]
给出:
KeyError: 'name'
最佳答案
您可能希望考虑为您的数据使用不同的结构,将每个人的所有数据保存在一起。只有两个人并且每个人只有两个属性,这并不重要,但是如果你有很多人和很多属性,那么只需要一个列表中的一个错误就会破坏同步。如果发生这种情况,您数据库中的一个或多个人将得到与他们相关的错误数据。
一种可能性是使用字典列表,每个人一个字典,例如
new_people = [
{'age': 56, 'name': 'john'},
{'age': 64, 'name': 'peter'}
]
然后您可以通过执行以下操作轻松打印它:
for d in new_people:
print('My name is {0}, I am {1} years old.'.format(d['name'], d['age']))
输出:
My name is john, I am 56 years old.
My name is peter, I am 64 years old.
将现有的 People 字典转换为字典列表并不难。使用几个 for
循环可能更具可读性,但我是用这个嵌套列表理解/生成器表达式来完成的:
new_people = [dict(t) for t in (((k,v[i]) for k,v in People.items()) for i in range(len(People['name'] )))]
附言。 Python 中的惯例是对普通变量使用小写名称。以大写字母开头的名称,如 People,通常用于类。您不必 遵循该约定,但它确实让阅读您的代码的人更容易。您可能会注意到,在上面发布的代码中,People 是浅蓝色的,这是因为 SO 代码格式化程序认为它是一个类名。
关于Python 将 format_map 与字典一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25956888/