Благодаря отличным людям на SO я обнаружил возможности, предлагаемые collections.defaultdict
, особенно в читабельности и скорости. Я использовал их для успеха.Множество уровней 'collection.defaultdict' в Python
Теперь я хотел бы реализовать три уровня словарей, два верхних - defaultdict
, а самый низкий - int
. Я не нашел подходящего способа сделать это. Вот моя попытка:
from collections import defaultdict
d = defaultdict(defaultdict)
a = [("key1", {"a1":22, "a2":33}),
("key2", {"a1":32, "a2":55}),
("key3", {"a1":43, "a2":44})]
for i in a:
d[i[0]] = i[1]
Сейчас это работает, но следующее, что желаемое поведение, не:
d["key4"]["a1"] + 1
Я подозреваю, что я должен был признать, что где-то на втором уровне defaultdict
имеет тип int
, но я не нашел, где и как это сделать.
Причина, по которой я использую defaultdict
, заключается в том, чтобы избежать необходимости инициализировать словарь для каждого нового ключа.
Не более элегантное предложение?
Спасибо, pythoneers!
только проблема в том, что не будет рассол, а это означает 'multiprocessing' несчастен об отправке их обратно и вперед. – Noah
@Noah: он будет мариновать, если вы используете именованную функцию уровня модуля вместо лямбда. – interjay
, конечно, глупо меня. – Noah