Слишком ленивый для инициализации каждого поля в словаре?Нет проблем:
В Python> 2.3:
from collections import defaultdict
В Python < = 2.3:
def defaultdict(type_):
class Dict(dict):
def __getitem__(self, key):
return self.setdefault(key, type_())
return Dict()
В любой версии:
d = defaultdict(list)
for stuff in lots_of_stuff:
d[stuff.name].append(stuff)
ОБНОВЛЕНИЕ:
Спасибо Ken Arnold . Я повторно реализовал более сложную версию defaultdict. Это должно вести себя точно как то в стандартной библиотеке .
def defaultdict(default_factory, *args, **kw):
class defaultdict(dict):
def __missing__(self, key):
if default_factory is None:
raise KeyError(key)
return self.setdefault(key, default_factory())
def __getitem__(self, key):
try:
return dict.__getitem__(self, key)
except KeyError:
return self.__missing__(key)
return defaultdict(*args, **kw)
Не считая проблемы с максимальной шириной, IE здесь делает правильные вещи. В блочной модели CSS говорится, что общий размер элемента - это ширина ПЛЮС его отступы, ПЛЮС его поля.
В блочной модели также говорится, что для любого неплавающего элемента уровня блока полный размер элемента (включая все) всегда составляет 100% содержащего его элемента. Вы можете использовать это в своих интересах, задав для ширины поля ввода значение «Авто», а затем явно задав отступы, границу и поля.
Вот небольшой пример (я знаю, что это много разметки, но это немного излишне, чтобы проиллюстрировать суть),
.places_edit_left{
width:250px;
overflow:auto;
}
.places_edit_left input {
padding-right:0px;
padding-left:10px;
margin: 0 0 0 0;
border:1px solid black;
width:auto;
display:block;
float:none;
}
Неправильная блочная модель применяется к IE в режиме совместимости. Следовательно, вам может потребоваться активировать строгий режим. См., Например, http://www.quirksmode.org/css/quirksmode.html
Вы хотите, чтобы входные данные были равны ширине контейнера? Установите ширину явно (250 пикселей - 10 пикселей для заполнения - XX пикселей для границ). Вы хотите, чтобы вход не был шире, чем div? Установите значение переполнения для div как скрытое.