如何在 Python 3 .6 中使用 f 字符串进行字典格式?

问题描述 投票:0回答:8

如何使用 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 dictionary format f-string
8个回答
140
投票

好吧,需要对字典键进行引用。

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


52
投票

根据您的字典对给定字符串的贡献数量,您可能会考虑使用

.format(**dict)
来使其更具可读性,即使它没有 f 字符串的简洁优雅。

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

输出:

我叫 Jenne,年龄 23 岁。

虽然此选项是视情况而定,但您可能希望避免引号和双引号的混乱。


26
投票

以下两条语句都适用于 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']}")

请注意上述语句中的单引号

'
和双引号
"
,因为放错它们会产生语法错误。


6
投票

发布的字符串 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
引用格式字符串中的所有出现,第二个给出要填充的变量。


4
投票

这会起作用。

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

如果

name
obj
f'name is {obj[name]}'
的属性,但是对于这个问题中的字典,您可以直接访问密钥
f'name is {person["name"]}'


2
投票

你只有一个对象,这无助于理解事物是如何运作的。让我们构建一个更完整的示例。

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))

0
投票

使用 f 字符串快速字符串化字典,无需手动键入密钥

我正在寻找一个简单的解决方案,以便使字典键,值对成为一个简单的对,而不需要挖掘字典的每个键。

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

0
投票

这适用于 python 3.9.7,我无法解释原因:

>>> d = {'a': 'A'}
>>> "d.a: {d[a]}".format(d=d)
'd.a: A'

出于某种原因,在访问格式字符串中的字典键时似乎应该省略引号。

© www.soinside.com 2019 - 2024. All rights reserved.