У меня есть список словарей
list1 = [{'time': '2020', 'name': 'one', 'address': '15423'},{'time': '2021', 'name': 'two', 'address': '8548305'}, {'time': '2019', 'name': 'five', 'address': '15423'}]
Я хочу преобразовать все, что имеет адрес с 15423, в «Действительный», а все остальные случаи недействительны. Окончательный результат
list1 = [{'time': '2020', 'name': 'one', 'address': 'Valid'},{'time': '2021', 'name': 'two', 'address': 'Invalid'}, {'time': '2019', 'name': 'five', 'address': 'Valid'}]
Вот что я пробовал
if '15423' in list1['address']:
list1['address'] = 'Valid'
else:
list1['address'] = 'Invalid'
Но я не уверен, почему это не работает. Может быть, мне нужно перебрать весь столбец. Ценю твою помощь
Вам нужно перебрать элементы list1
, используя цикл for
, поскольку list1
— это список словарей:
for i in range(len(list1)):
if '15423' in list1[i]['address']:
list1[i]['address'] = 'Valid'
else:
list1[i]['address'] = 'Invalid'
print(list1)
Вы также можете сжать if/else
в тройку, если ищете более краткое решение:
for i in range(len(list1)):
list1[i]['address'] = 'Valid' if '15423' in list1[i]['address'] else 'Invalid'
Оба они печатают:
[{'time': '2020', 'name': 'one', 'address': 'Valid'},
{'time': '2021', 'name': 'two', 'address': 'Invalid'},
{'time': '2019', 'name': 'five', 'address': 'Valid'}]
@YanRemes Отредактировано, попробуйте сейчас.
Это все еще недействительно для всех из них
Я не могу воспроизвести проблему. Пожалуйста, подтвердите правильность данных примера, которые вы предоставили.
Да, это мои данные, но похоже, что они не проходят через оператор if и учитывают только оператор else
Тогда я не уверен. Опять же, я не могу воспроизвести проблему, которую вы описываете, поэтому, к сожалению, я мало что могу здесь сделать.
@BrokenBenchmark Обратитесь к моему решению, если оно вам подходит.
вам нужно пройтись по списку!
скажем num_list = [0, 1, 2, 3]
используя цикл for
следующим образом:
for item in num_list:
...
будет проходить через num_list
, как и следовало ожидать. item
будет установлено текущее значение, в этом случае он установит item
на 1
, выполнит код в цикле, затем установит item
в 2
, затем снова выполнит код в цикле и так далее.
теперь скажем num_list = [{"number": 0}, {"number": 1}, {"number": 2}, {"number": 3}]
.
на этот раз, если вы запустите тот же цикл for
, item
все равно будет установлено текущее значение, в этом случае оно будет установлено на Словарь вместо числа. таким образом, item
устанавливается в {"number": 0}
, затем запускается код внутри цикла, затем item
устанавливается в {"number": 1}
, затем код внутри цикла запускается снова и т. д.
таким образом, item
будет установлен в словарь, который к тому времени вы сможете редактировать, как и любой другой словарь! просто сделай item["number"] = ...
для фактического фиксированного кода, вот и я
list1 = [
{'time': '2020', 'name': 'one', 'address': '15423'},
{'time': '2021', 'name': 'two', 'address': '8548305'},
{'time': '2019', 'name': 'five', 'address': '15423'}
]
for item in list1:
if item["address"] == "15423":
item["address"] = "Valid"
else:
item["address"] = "Invalid"
print(list1)
выход:
[
{'time': '2020', 'name': 'one', 'address': 'Valid'},
{'time': '2021', 'name': 'two', 'address': 'Invalid'},
{'time': '2019', 'name': 'five', 'address': 'Valid'}
]
Большинство из них ответили на вопрос. См. приведенное ниже решение, а также несколько пунктов:
У вас есть словари в списке, поэтому вам нужно сначала перебрать каждый элемент и получить доступ к словарю. Во время итерации проверьте, присутствует ли ключ адреса в словаре или нет, а затем примените условие if. Если мы используем item['address']
, возможно, что код может сломаться, если мы не найдем ключ адреса ни в одном из словарей. Следовательно, используйте item.get('address')
для извлечения значения.
Вот код:
list1 = [
{'time': '2020', 'name': 'one', 'address': '15423'},
{'time': '2021', 'name': 'two', 'address': '8548305'},
{'time': '2019', 'name': 'five', 'address': '15423'}
]
for item in list1:
if item.get('address'):
if item.get('address')== "15423":
item["address"] = "Valid"
else:
item["address"] = "Invalid"
print(list1)
Я не знаю почему, но все значения имеют значение Invalid, поэтому по некоторым причинам он не учитывает допустимый случай.