#python #python-3.x #list #dictionary
#питон #python-3.x #Список #словарь
Вопрос:
У меня есть словарь, и в одном это ключ / значение, это значение представляет собой список. Я пытаюсь выполнить итерацию по этому dict, чтобы удалить специальные символы (это часть в порядке), но когда я получаю это значение (которое представляет собой список) Я не знаю, как это сделать.
Это мой диктат:
{
"id_pessoa_ies": "3",
"cpf": "string",
"nome": "TESTE COM Ç E ESPACO E É",
"nome_social": "string",
"sexo": "string",
"data_nascimento": "26-11-2020",
"cor_raca": "Preta",
"estado_civil": "Test word here",
"municipio_naturalidade": "Test again",
"uf_naturalidade": "TEST",
"pais_nascimento": "string",
"docente_pessoa": [
{
"id_docente_ies": "string",
"matricula": "123456789",
"titulacao": "TEST",
"ano_ingresso": "2020",
"tipo_contrato": "string",
"tipo_vinculo": "TESTE COM Ç E ESPACO E É ARROBA @ #",
"id_unidade_lotacao": "1",
"situacao": "ACTIVATE"
}
]
}
Это то, что я делал до сих пор:
for key, value in mydict.items():
if key == 'docente_pessoa':
# what should I do here to iterate over 'docente_pessoa' to get it's values and
# apply my function 'text_to_it()' on it?
else:
text = text_to_id(value)
mydict.items[key] = text
Я ценю любую помощь.
Спасибо
Комментарии:
1.
for docente_key, docente_val in value.items():
вы можете называть переменные как угодно. По сути, то же самое, что вы уже сделали, но с разными именами переменных. Кроме того, поскольку словари изменчивы, вы можете просто сделатьval = text_to_id(val)
, и это должно иметь тот же эффект.2. Привет, @Tim, спасибо за ваш ответ. Я попробовал то, что вы сказали, и я получил :
for docente_key, docente_val in value: ValueError: too many values to unpack (expected 2)
. Вы знаете, что может быть?3. Да, я обновил первый комментарий, должно быть
for ... in value.items():
, у вас уже есть код, вам просто нужно сделать это снова, с другими именами переменных. Цикл внутри цикла.
Ответ №1:
Поскольку это список и dict
в нем есть a, вы можете получить его следующим образом:
docente_pessoa_dict = value[0]
Теперь у вас есть новый набор значений, которые вы должны изменить, я думаю, так что вы могли бы сделать это:
for key, value in docente_pessoa_dict.items():
# do stuff with key and value
итак, чтобы завершить это:
for key, value in mydict.items():
if key == 'docente_pessoa':
docente_pessoa_dict = value[0]
for key, value in docente_pessoa_dict.items():
# do stuff with key and value
else:
# do stuff with key and value
Поскольку опубликованный код выдает a RuntimeError: dictionary changed size during iteration
, потому что вы меняете значение во время итерации dict
, что совершенно не связано с этим вопросом, вам нужно было бы найти способ создать дубликат ключей, а затем изменить значение.
Вы можете сделать это, просто преобразовав your dict
в list
, а затем изменив value
:
for key in list(mydict):
if key == 'docente_pessoa':
docente_pessoa_dict = mydict[key][0]
for docente_pessoa_dict_key, docente_pessoa_dict_value in docente_pessoa_dict.items():
text = text_to_id(docente_pessoa_dict_value)
mydict[key][0][docente_pessoa_dict_key] = text
else:
text = text_to_id(mydict[key])
mydict[key] = text
Комментарии:
1. Спасибо вам за вашу помощь. Я получил эту ошибку
RuntimeError at xxxx dictionary changed size during iteration
. Когда я добавил свой mydict для обновления значения внутри внутреннего for . Вы знаете, что может быть?2. @GuilhermeSchults ну, это не часть вашего вопроса, но взгляните на это, и я обновлю ответ
3. Я приветствую вашу помощь. Я посмотрю на это.
4. @GuilhermeSchults вот так, я обновил ответ правильным способом сделать это, дайте мне знать, если это сработает для вас
5. @GuilhermeSchults Я просто исправил код, поскольку он не изменил значение
docente_pessoa_dict_key
I исправил его сейчас, и он должен делать то, что вы намеревались, если я правильно понял.