2015-03-31 3 views
1

У меня есть список элементов, который имеет длину 14:Строительство питон ДИКТ из одного списка

html_doc = [u'Crabtree Conservation Area - Number 28', 
u'Conservation Area', 
u'Environment Agency Flood Risk Zone 3', 
u'Flood Risk Zone 3', 
u'Environment Agency Flood Risk Zone 2', 
u'Flood Risk Zone 2', 
u'Buildings Structures And Works Exceeding 90 Metres', 
u'Aerodrome Safeguarding London Heathrow 1', 
u'Controlled Parking Zone T', 
u'Controlled Parking Zone T', 
u'Flood Zone 3 Low Residual Risk', 
u'Flood Zone 3 Low Residual Risk', 
u"Embankment Residents' Association", 
u"Embankment Residents' Assoc."] 

каждый из элементов в массиве должны быть соединены вместе, как «Имя»: «Constraint_type» что означает, что первый и второй элементы списка связаны.

У меня есть этот код, думаю, что я Дон»будет работать:

for i in xrange(len(html_doc)): 
    dict.append("Name:" html_doc[i], "Constraint_Type": html_doc[i+1]) 

Любая идея по этому поводу?

+0

Это мне не ясно, где ' "Имя: 'и'" Constraint_Type" 'строки вписываться в пределах ваш dict. Элементы не могут повторить одни и те же клавиши. Можете ли вы привести пример вывода, который вы ожидаете для своего списка ввода (или, возможно, первых четырех или шести элементов из него)? – Blckknght

ответ

1

вы можете использовать параметр step в xrange:

for i in xrange(0, len(html_doc), 2): 
    dict[html_doc[i]] = html_doc[i+1] 

xrange необходим параметр start, если вы используете step. Если вы используете шаг, xrange сгенерирует [start, start+step, start+2*step ... ]

+0

Почему голос? –

+0

fwiw, 'step' не является именованным аргументом в' xrange'. 'Append' не является методом на 'dict' (и строка имеет синтаксическую ошибку) – Jack

+1

@Thom Wiggers вы проверили этот код? –

3
html_dict = dict(zip(html_doc[::2], html_doc[1::2])) 
+0

@tzman Вы уже проверили этот код? кажется, не работает в моем конце! –

+0

Работал хорошо для меня. Словарь создается как 'html_dict'. – tzaman

3

Использование iter с dict и zip на пару и создать ключ/значение из каждых двух элементов:

it = iter(html_doc) 

print(dict(zip(it,it))) 
{u'Buildings Structures And Works Exceeding 90 Metres': u'Aerodrome Safeguarding London Heathrow 1', u'Flood Zone 3 Low Residual Risk': u'Flood Zone 3 Low Residual Risk', u"Embankment Residents' Association": u"Embankment Residents' Assoc.", u'Crabtree Conservation Area - Number 28': u'Conservation Area', u'Controlled Parking Zone T': u'Controlled Parking Zone T', u'Environment Agency Flood Risk Zone 3': u'Flood Risk Zone 3', u'Environment Agency Flood Risk Zone 2': u'Flood Risk Zone 2'} 

Если вы отрезаете список создать два новых списки.

+1

было полностью ожидаемо, что там будет кто-то с конструкцией 'zip' :) –

+1

Никче, чем мой. :) – tzaman

+1

@tzaman, приветствия. –

0

Я думаю, что это вполне читаемым подход:

d = {} 
while html_doc: 
    d[html_doc.pop()] = html_doc.pop() 

Отдает:

>>> d 
{u'Buildings Structures And Works Exceeding 90 Metres': u'Aerodrome Safeguarding London Heathrow 1', 
u'Controlled Parking Zone T': u'Controlled Parking Zone T', 
u'Crabtree Conservation Area - Number 28': u'Conservation Area', 
u"Embankment Residents' Association": u"Embankment Residents' Assoc.", 
u'Environment Agency Flood Risk Zone 2': u'Flood Risk Zone 2', 
u'Environment Agency Flood Risk Zone 3': u'Flood Risk Zone 3', 
u'Flood Zone 3 Low Residual Risk': u'Flood Zone 3 Low Residual Risk'} 
Смежные вопросы