Добавление значений из списка в словарь в python

#python

#python

Вопрос:

Предположим, у меня есть список li=['project1','project2','project3'] , в который я хочу добавить эти значения в качестве ключа в словарь, и значение первого ключа должно быть завершено rest onhold

проекты могут быть любыми, и значение первого проекта в списке должно быть завершено, требуется сохранить вывод:

 dict={'project1':'completed','project2':'onhold','project3':'onhold'}
  
 li=['project1','project2','project3']
for trav_cont in li:
   dict[trav_cont]='completed'  
  

Комментарии:

1. Вы можете использовать zip() : my_dict = dict(zip(li, ('completed',) ('onhold',) * (len(li) - 1))) . Не используйте dict в качестве имени переменной, вы затеняете встроенную функцию.

Ответ №1:

Вы можете использовать enumerate , чтобы узнать позицию в списке, т.е.:

 li=['project1','project2','project3']
dct = {i: 'completed' if inx==0 else 'onhold' for inx, i in enumerate(li)}
print(dct) # {'project1': 'completed', 'project2': 'onhold', 'project3': 'onhold'}
  

Я использовал здесь так называемое понимание dict в сочетании с троичным if, поэтому значение равно 'completed' , если его первый элемент (имеет индекс 0, поскольку индексы python основаны на 0) else 'onhold'

Ответ №2:

Вы можете создать словарь с предопределенными ключами и значением по умолчанию value :

 my_dict = dict.fromkeys(li, 'onhold')
my_dict['project1'] = 'completed'
  

Дает:

 {'project1': 'completed', 'project2': 'onhold', 'project3': 'onhold'}
  

Комментарии:

1. Это самый чистый ответ.

2. Но имя не всегда будет project1 оно должно быть динамическим

3. @shee8, вы можете использовать my_dict[next(iter(my_dict))] = 'completed' для установки значения для первого ключа. (Это будет работать только на python 3.6 )

Ответ №3:

 for idx, key in enumerate(li):
    if idx == 0:
        dixt[key] = 'completed'
        continue
    dict[key] = 'onhold'
  

Комментарии:

1. Просто используйте else , вам это не нужно continue .