#python #python-3.x
#python #python-3.x
Вопрос:
В качестве входных данных используется словарь, на основе которого формируется второй словарь в следующем коде:
dict1 = {'a': 'ok', 'b': 'ok', 'c': 'needs repair'}
final_dict = {}
for d in dict1.items():
if d[1] == 'ok':
final_dict[d[0]] = 'needs repair'
else:
final_dict[d[0]] = 'ok'
print(final_dict)
где он выводит:
{'a': 'needs repair', 'b': 'needs repair', 'c': 'ok'}
Как изменить цикл for на понимание списка?
Ответ №1:
Вы можете использовать понимание словаря — понимание списка здесь не имеет особого смысла:
# what to change into what
flipper = {"ok":"needs repair", "needs repair":"ok"}
source = {'a': 'ok', 'b': 'ok', 'c': 'needs repair'}
flipped = { key:flipper[value] for key, value in source.items()}
print(source)
print(flipped)
Вывод:
{'a': 'ok', 'b': 'ok', 'c': 'needs repair'}
{'a': 'needs repair', 'b': 'needs repair', 'c': 'ok'}
Ответ №2:
Вы можете переписать свой цикл for в понимание словаря, например:
dict1 = {'a': 'ok', 'b': 'ok', 'c': 'needs repair'}
result = {k: 'needs repair' if v == 'ok' else 'ok' for k, v in dict1.items()}
print(result)
Вывод
{'a': 'needs repair', 'b': 'needs repair', 'c': 'ok'}
Ответ №3:
Вы можете сделать это с помощью одного понимания dict следующим образом:
>>> final_dict = {k: 'needs repair' if v == 'ok' else 'ok' for k, v in dict1.items()}
>>> final_dict
{'a': 'needs repair', 'b': 'needs repair', 'c': 'ok'}
>>>
На практике я бы разделил длинную строку:
final_dict = {k: 'needs repair' if v == 'ok' else 'ok'
for k, v in dict1.items()}
Ответ №4:
Было бы лучшим выбором, если бы вы попросили понимание словаря
final_dict = { k: 'needs repair' if v=='ok' else 'ok' for k,v in dict1.items()}