Инициализировать список для переменной в словаре внутри цикла

Я работал некоторое время в Python, и я решил эту проблему, используя «try» и «except», но мне было интересно, есть ли другой способ ее решения.

В основном я хочу создать такой словарь:

example_dictionary = {"red":[2,3,4],"blue":[6,7,8],"orange":[10,11,12]} 

Поэтому, если у меня есть переменная со следующим содержимым:

 root_values = [{"name":"red","value":2},{"name":"red","value":3},{"name":"red","value":4},{"blue":6}...] 

Мой способ реализовать example_dictionary:

 example_dictionary = {} for item in root_values: try: example_dictionary[item.name].append(item.value) except: example_dictionary[item.name] =[item.value] 

Надеюсь, мой вопрос ясен, и кто-то может мне помочь.

Благодарю.

2 Solutions collect form web for “Инициализировать список для переменной в словаре внутри цикла”

Ваш код не добавляет элементы в списки; вместо этого вы заменяете список на отдельные элементы. Чтобы получить доступ к значениям в существующих словарях, вы должны использовать индексирование, а не поиск атрибутов ( item['name'] , а не item.name ).

Используйте collections.defaultdict() :

 from collections import defaultdict example_dictionary = defaultdict(list) for item in root_values: example_dictionary[item['name']].append(item['value']) 

defaultdict является подклассом dict который использует __missing__ hook на dict для автоматического получения значений, если ключ еще не существует в сопоставлении.

или используйте dict.setdefault() :

 example_dictionary = {} for item in root_values: example_dictionary.setdefault(item['name'], []).append(item['value']) 

Здесь могут помочь списки и словарные возможности …

Данный

 In [72]: root_values Out[72]: [{'name': 'red', 'value': 2}, {'name': 'red', 'value': 3}, {'name': 'red', 'value': 2}, {'name': 'green', 'value': 7}, {'name': 'green', 'value': 8}, {'name': 'green', 'value': 9}, {'name': 'blue', 'value': 4}, {'name': 'blue', 'value': 4}, {'name': 'blue', 'value': 4}] 

Функция, подобная item() показанная ниже, может извлекать значения с определенными именами:

 In [75]: def item(x): return [m['value'] for m in root_values if m['name']==x] In [76]: item('red') Out[76]: [2, 3, 2] 

Тогда это просто вопрос понимания словаря …

 In [77]: {x:item(x) for x in ['red', 'green', 'blue'] } Out[77]: {'blue': [4, 4, 4], 'green': [7, 8, 9], 'red': [2, 3, 2]} 
  • Хранение столбцов таблицы в словаре Python
  • Один лайнер: создание словаря из списка с индексами в виде ключей
  • Копирование ключа / значения из одного словаря в другой
  • CSV, Python: правильно использовать DictWriter (ValueError: dict содержит поля не в именах полей)
  • Измените несколько ключей из словаря, выполняя операцию timedelta в Python
  • Создание словаря из файла .txt с использованием Python
  • python: что лучший способ проверить несколько ключей в словаре?
  • Проверьте шаблон ключа в словаре в python
  • Python - лучший язык программирования в мире.