Python - добавить словари в список - PullRequest
0 голосов
/ 03 октября 2018

Список 1

[]

словарь 1

{ 
   'test': 'baum',
   'alter': 0,
   'voegel': ['amsel']
}

словарь 2

{ 
   'test': 'grosserbaum',
   'alter': 3,
   'voegel': ['meise']
}

Сделайте что-нибудь, чтобы объединить словари ....

Результат:

[
   { 
      'test': 'baum',
      'alter': 0,
      'voegel': ['amsel'] 
   }, 
   { 
      'test': 'grosserbaum',
      'alter': 3,
      'voegel': ['meise']
   }
]

Как это можно сделать с помощью Python?Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Если данные в ваших dict s никогда не меняются, и вам нужны ключи, тогда вам следует выбрать namedtuple s.

Вам нужно будет преобразоватьвложенный list в tuple, поскольку списки не могут быть хэшируемыми.Затем вы можете взять свои существующие словари и вставить их в ваш именованный кортеж (или создать их напрямую).

d1 = { 
   'test': 'baum',
   'alter': 0,
   'voegel': ('amsel')
}
d2 = { 
   'test': 'grosserbaum',
   'alter': 3,
   'voegel': ('meise')
}

from collections import namedtuple

Test = namedtuple("Test", "test alter voegel")

t1 = Test(**d1)
t2 = Test(**d2)

print(t1)            # Test(test='baum', alter=0, voegel='amsel')
print(t2)            # Test(test='grosserbaum', alter=3, voegel='meise')
print(set([t1, t2])) # {Test(test='grosserbaum', alter=3, voegel='meise'), Test(test='baum', alter=0, voegel='amsel')}

Теперь вы можете хранить эти именованные кортежи внутри set, чтобы коллекция содержала только уникальные элементы!Кроме того, именованные кортежи используют меньше памяти, чем dict, поскольку они реализуют __slots__.

0 голосов
/ 03 октября 2018
d1={ 
   'test': 'baum',
   'alter': 0,
   'voegel': ['amsel']
}
d2={ 
   'test': 'grosserbaum',
   'alter': 3,
   'voegel': ['meise']
}

Давайте попробуем получить ожидаемый результат

{d1: d2} #TypeError: unhashable type: 'dict'

Ошибка возникает из-за того, чтоТип dict не может быть хеширован.похож на тип списка, поскольку он не поставляется с хэш-функцией.Следовательно, мораль истории заключается в том, что объект должен быть хэшируемым, это должны быть неизменяемые типы, такие как string, integer или tuple.

В случае, если вы просто хотите перебратьdicts

[d1,d2] # convert into a list

ИЛИ

(d1,d2)# convert into a tuple

или создайте новый список с неизменяемыми ключами

{'d1':d1,'d2':d2}

Для дальнейшей справки https://www.asmeurer.com/blog/posts/what-happens-when-you-mess-with-hashing-in-python/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...