Преобразование для понимания цикла в список для формирования словаря

#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()}