如何使用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']))
如何使用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']))
需要给字典键提供一个引用。
f'我的名字是{person["name"]}, 我的年龄是{person["age"]}'
根据您的字典对给定字符串所做的贡献数量,您可能会考虑使用.format(**dict)
来使其更加易读,即使它没有f-string的简洁优雅。
>>> person = {'name': 'Jenne', 'age': 23}
>>> print('My name is {name} and my age is {age}.'.format(**person))
输出:
我的名字是Jenne,我今年23岁。
虽然这个选项是情景性的,但你可能会喜欢避免引号和双引号混乱。
f'一些文本 {mydict['我愚蠢的错误']} 更多文本'
与 f'一些文本 {mydict["这有效"]} 更多文本'
。视觉上很难发现错误(也许是因为我太差了),所以尽管我很喜欢f字符串,但这是旧格式更加灵活且避免我这样的笨蛋再犯错误的一个方面。 - Mark Langfordformat_map
函数,像这样 print('My name is {name} and my age is {age}.'.format_map(person))
。参考链接:https://docs.python.org/3/library/stdtypes.html#str.format_map - dbow.format_map(dict)
和 .format(**dict)
有什么区别吗? - MichaelChirico以下两个语句从Python 3.6开始都可以使用:
print(f'我的名字是{person["name"]},年龄是{person["age"]}')
print(f"我的名字是{person['name']},年龄是{person['age']}")
请注意上述语句中单引号和双引号的用法,放置不当将导致语法错误。
pkuphy 发布的字符串是正确的,你必须使用引号来访问该字典:
f'My name {person["name"]} and my age {person["age"]}'
str.format()
函数:>>> person = {'name': 'Jenne', 'age': 23}
>>> print('My name is {person[name]} and my age is {person[age]}.'.format(person=person))
输出:
我的名字是Jenne,我23岁。
第一个person
引用格式字符串中的所有出现,第二个给出要填充的变量。
这将有效。
f'My name {person["name"]} and my age {person["age"]}'
name
是obj
的一个属性,那么f'name is {obj[name]}'
,但对于像这个问题中的字典,您可以直接访问键f'name is {person["name"]}'
。你只有一个物体,这样并不能很好地理解事情是如何运作的。让我们来举一个更完整的例子。
person0 = {'name': 'Jenne', 'age': 23}
person1 = {'name': 'Jake', 'age': 29}
person2 = {'name': 'John', 'age': 31}
places = ['Naples', 'Marrakech', 'Cape Town']
print('''My name {0[name]} and my age {0[age]},
your name {1[name]} and your age {1[age]},
my favourite place {3[0]}'''.format(person0, person1, person2, places))
您可以使用以下方式访问完整对象:
print('{2}'.format(person0, person1, person2, places))
或者选择属性,甚至是级联的:
最初的回答
print('{3.__class__.__name__}'.format(person0, person1, person2, places))
我正在寻找一个简单的解决方案,以便将字典的键值对转换为简单的一对,而无需深入到字典的每个键中。
person = {'name': 'Jenne', 'age': 23}
stringified_dict = ' '.join([f'{k.capitalize()} {v}' for k,v in person.items()])
print(f'In a Variable --> {stringified_dict}')
# function
def stringify_dict(dict_val:dict) -> str:
return ' '.join([f'{k.capitalize()} {v}' for k,v in dict_val.items()])
stringified_dict = stringify_dict({'name': 'Jenne', 'age': 23})
print(f'Using Function --> {stringified_dict}')
# lambda
stringify_dict = lambda dict_val: ' '.join([f'{k.capitalize()} {v}' for k,v in dict_val.items()])
stringified_dict = stringify_dict({'name': 'Jenne', 'age': 23})
print(f'Using Lambda --> {stringified_dict}')
In a Variable --> Name Jenne Age 23
Using Function --> Name Jenne Age 23
Using Lambda --> Name Jenne Age 23
str.format()
方法,f-string 和 str.format 的区别在于如何执行索引查找。在f-string
中,你必须引用字典中的键,而在str.format()
中则会自动将索引值转换为字符串。 - M. Leungf'我的名字是 {person['name']},年龄是 {person['age']}'
- Arn