Как добавить новые словари в большой словарь, изменяя только индексы людей - PullRequest
0 голосов
/ 21 марта 2020

У меня проблема, потому что я хочу добавить меньшие словари в большой словарь, используя al oop. Мне удается добавить словари, которые называются 1,2,3, et c. Мне бы хотелось, чтобы этим словарям предшествовало слово «человек». Можете ли вы сделать это с помощью одной строки кода?

Это мой фактический код:

def smaller_dictionaries(number):
    dictionary_consist_of_3_smaller_dictionary ={number:{"surname":None,"name":None,"age":None,"profession":None,"marital status":None} for number in range (1,number)}
    print (dictionary_consist_of_3_smaller_dictionary)
smaller_dictionaries(4)

and this is my output:

{1: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 2: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 3: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}}

, поскольку я хочу добавить префикс "person" в программе l oop показывает, что имя 'person_' не определено

dictionary_consist_of_3_smaller_dictionary ={person_(number):{"surname":None,"name":None,"age":None,"profession":None,"marital status":None} for number in range (1,number)}

I want to have output in this form:
{peson_1: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, person_2: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, person_3: {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}}

Возможно ли добавить префикс "person" в l oop?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Я думаю, вы ищете что-то вроде этого:

def smaller_dictionaries(number):
  dictionary_consist_of_3_smaller_dictionary={}
  for i in range(1,number+1):
    key_ = 'person_'+str(i)
    dictionary_consist_of_3_smaller_dictionary[key_] ={"surname":None,"name":None,"age":None,"profession":None,"marital status":None}

Вывод:

{'person_1': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 'person_2': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 'person_3': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 'person_4': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}}
0 голосов
/ 21 марта 2020

Вы получаете ошибку, потому что Python рассматривает person_ в качестве имени переменной, следовательно, оно вызывает NameError , сообщая вам, что не определено:

Raised когда локальное или глобальное имя не найдено. Это относится только к неквалифицированным именам. Связанное значение - это сообщение об ошибке, которое включает имя, которое не может быть найдено.

Одно из возможных решений с небольшим кодом - использование f-строк :

def smaller_dictionaries(number):
    dictionary_consist_of_3_smaller_dictionary = {
        f'person_{number}': {"surname": None, "name": None, "age": None, "profession": None, "marital status": None} for number in
        range(1, number)}
    print(dictionary_consist_of_3_smaller_dictionary)


smaller_dictionaries(4)

Выход

{'person_1': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 'person_2': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}, 'person_3': {'surname': None, 'name': None, 'age': None, 'profession': None, 'marital status': None}}
...