如何在python 3.6中使用f-string进行字典格式?

Abo*_*nah 21 python format dictionary f-string

我怎么能用python 3.6 F-String做这个格式?

person = {'name': 'Jenne', 'age': 23}

print('My name {0[name]} and my age {1[age]}'.format(person, person))
print('My name {0} and my age {1}'.format(person['name'], person['age']))
Run Code Online (Sandbox Code Playgroud)

M. *_*ung 22

那么,需要字典键的引用.

f'My name {person["name"]} and my age {person["age"]}'

  • 只需在整个字符串和项目之间使用不同的引号即可。如果用双引号将字符串引起来,请对键使用单引号。单引号和双引号在python中都具有相同的功能。 (3认同)
  • 那就是`str.format()`方法,f-string和str.format之间的区别在于如何执行索引查找,因为你必须在`f-string`中引用字典中的键,但是自动转换自索引值为`str.format()`中的字符串 (2认同)

yet*_*200 16

以下两个语句都适用于 Python 3.6 以后的版本:

  1. print(f'My name {person["name"]} and my age {person["age"]}')
  2. print(f"My name {person['name']} and my age {person['age']}")

请注意上述语句中的单引号'和双"引号,因为放置错误会导致语法错误。


Mar*_*ord 11

根据字典对给定字符串的贡献数量,您可以考虑使用.format(**dict)它来使其更具可读性,即使它没有f字符串的简洁优雅.

>>> person = {'name': 'Jenne', 'age': 23}
>>> print('My name is {name} and my age is {age}.'.format(**person))

My name is Jenne and my age is 23.
Run Code Online (Sandbox Code Playgroud)

虽然这个选项是情境性的,但您可能希望避免使用引号和双引号

  • 问题是关于Python 3.6 f字符串的明确,当你清楚地解释你的答案,这不是关于被问的问题. (3认同)
  • 真的,我写这篇评论最近在我自己的一些作品中添加了一个f字符串:`f'some text {mydict ['mydumbmistake']} more text'`vs`fomeome text {mydict ["thisworks "更多的文字"和视觉上的错误对我来说很难发现(也许我只是垃圾),所以喜欢和我一样喜欢弦乐,这是老式的感觉更轻松的一个地方.像我这样的傻瓜又犯了一个错误. (2认同)
  • 您可以使用 `format_map` 函数 https://docs.python.org/3/library/stdtypes.html#str.format_map 像这样 `print('我的名字是 {name},我的年龄是 {age}。' .format_map(人))` (2认同)
  • @dbow `.format_map(dict)` 和 `.format(**dict)` 之间有什么区别吗? (2认同)

Chr*_*nig 6

发布的字符串 pkuphy 是正确的,您必须使用引号来访问字典:

f'My name {person["name"]} and my age {person["age"]}'
Run Code Online (Sandbox Code Playgroud)

您的原始字符串适用于str.format()- 函数:

>>> person = {'name': 'Jenne', 'age': 23}
>>> print('My name is {person[name]} and my age is {person[age]}.'.format(person=person))
Run Code Online (Sandbox Code Playgroud)

输出:

我叫 Jenne,今年 23 岁。

第一个person引用格式字符串中所有出现的位置,第二个给出要填充的变量。