使用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