使用format_map与字典的Python

我有一本字典:使用format_map与字典的Python

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' 

回答:

str.format_map接受的映射。你不能传递额外的参数。

或者,您可以使用str.format,但嵌套{..}内部索引({0[name][{x}]})是不允许的。

>>> people = { 

... 'name': ['john','peter'],

... 'age': [56, 64]

... }

>>> ['My name is {}, i am {} old'.format(*x)

... for x in zip(people['name'], people['age'])]

['My name is john, i am 56 old', 'My name is peter, i am 64 old']

>>> ['My name is {}, i am {} old'.format(*x)

... for x in zip(*map(people.get, ['name', 'age']))]

['My name is john, i am 56 old', 'My name is peter, i am 64 old']

回答:

这可能是更直观的为您做到:

strs = ["My name is " + People['name'][i] + ",i am " + str(People['age'][i]) + " old" for i in len(People)] 

print(strs # ['My name is john,i am 56 old', 'My name is peter,i am 64 old'])

回答:

你可以做两通格式:

people = { 

'name': ['John', 'Peter'],

'age': [56, 64]

}

for i in range(2):

'My name is {{name[{0}]}}, I am {{age[{0}]}} years old.'.format(i).format_map(people)

#>>> 'My name is John, I am 56 years old.'

#>>> 'My name is Peter, I am 64 years old.'

使用

str.format

zip/

map解决方法

...{{...}}...格式为...{...}...,所以适合致电format

回答:

您可能希望考虑为您的数据使用不同的结构,这样可以将每个人的所有数据放在一起。只有两个人,每个人只有两个属性,这并不重要,但是如果你有很多人和很多属性,它只会在你的一个列表中出现一个错误来破坏同步。如果发生这种情况,数据库中的一个或多个人将得到与他们相关的错误数据。

一种可能性是使用类型的字典列表,一个字典的每个人,如

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.


将现有的人字典转换为字典列表并不难。这也可能是更具可读性与一对夫妇for循环做,但我这个嵌套列表理解/发电机表达式做到了:

new_people = [dict(t) for t in (((k,v[i]) for k,v in People.items()) for i in range(len(People['name'])))]

PS。 Python中使用小写名称作为常规变量的约定。以大写字母开头的名称(如People)通常用于类。你不需要拥有来遵循这个约定,但它确实可以让正在阅读你的代码的人更容易。您可能会注意到,在您上面发布的代码中,People是淡蓝色,这是因为SO代码格式化程序认为它是类名。

以上是 使用format_map与字典的Python 的全部内容, 来源链接: utcz.com/qa/266414.html

回到顶部