Я получаю ту же ошибку, не думайте, что это всего лишь 2,3 проблема.
Обход:
main.attrib.update(dict(another.attrib))
# or more efficient if it has many attributes:
main.attrib.update(another.attrib.iteritems())
UPDATE
lxml.etree._Attrib.update
принимает dict или итерацию (источник) . Хотя _Attrib
имеет интерфейс dict
, это не экземпляр dict
.
In [3]: type(another.attrib)
Out[3]: lxml.etree._Attrib
In [4]: isinstance(another.attrib, dict)
Out[4]: False
Итак, update
пытается перебрать элементы как key, value
. Может быть, это сделано для исполнения. Только lxml
автор знает.
Способы его изменения в lxml
:
Подкласс dict
.
Проверка на hasattr(sequence_or_dict, 'items')
.
Я не знаком с Cython
и не знаю, что лучше.