Имейте в виду: словари не имеют порядка.Таким образом, цикл iteritems () не обязательно начинается с 'b; 0'.Попробуйте например
for k,v in x1.iteritems():
print k
чтобы увидеть.На моем компьютере это выдает
a;1
a;0
b;0
b;1
Это создает проблему, поскольку в вашем коде предполагается, что ключи приходят в том порядке, в котором они появляются в определении x1 [править: или, скорее, они приходят в порядке].Например, вы можете перебирать отсортированные ключи:
for k in sorted(x1.keys()):
v = x1[k]
print k, v
Тогда проблема с заказом решена.Но я думаю, что у вас больше проблем в вашем коде.
Редактировать: Структуры данных:
, возможно, было бы лучше сохранить ваши данные каким-то образом, например
x1 = {'a': [('A','a1'),('B','a2'),('C','a3')], 'b': ... }
, еслиВы не можете изменить формат, вот как вы можете конвертировать ваши данные:
x1f = {}
for k in x1.iterkeys():
tag, id = k.split(';')
if int(id) == 0:
x1f[tag] = zip(x1[k].split(';'), x1[tag+';'+'1'].split(';'))
print x1f
Оттуда должно быть проще конвертировать в желаемый результат.
И в зависимости от того, хотите ли вы расширитьСложность вывода в будущем, вы можете рассмотреть возможность использования pyxml:
from xml.dom import minidom
doc = minidom.Document()
, тогда вы можете использовать методы createElement и appendChild.