Как сделать формат словаря с f-строкой в ​​python 3.6?

Как я могу сделать этот формат с помощью 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']))

Ответ 1

Ну, нужна цитата для словарного ключа.

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

Ответ 2

В зависимости от количества вкладов, внесенных вашим словарем в заданную строку, вы можете использовать .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.

В то время как эта опция является ситуационной, вам может понравиться избегать резких цитат и двойных кавычек

Ответ 3

Оба приведенных ниже утверждения будут работать на 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']}")

Пожалуйста, обратите внимание на одинарную ' и двойную " кавычку в приведенных выше утверждениях, как размещение их неправильно будет давать ошибку синтаксиса.

Ответ 4

Это будет работать.

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

если name является свойством obj, f'name is {obj[name]}', но для dict, как и в этом вопросе, вы можете напрямую обращаться к клавише f'name is {person["name"]}'.

Ответ 5

Изменить: путайте старую функцию формата и новые f-stings. Добавлено уточнение.

Строка 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))

My name is Jenne and my age is 23.

Первый person ссылается на все вхождения в форматированной строке, второй - на заполнение переменной.

Ответ 6

у вас есть только один объект, который не помогает понять, как все работает. давайте построим более полный пример.

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