2015-03-11 1 views
1

Я получаю ответ JSon из ГУМЗА через PySolr, все работает отлично, только что Facet поля приходят в противоречивой форме, ниже фасетные поляPython преобразовать список в словарь с ключевым значением

LocalityId = [ "14008",1,"14293",4,] 

Теперь мне нужно для преобразования приведенного выше списка в пар ключ-значение (Словарь), а также

LocalityId = {"14008":"1", "14293":"4"} 

Как достичь этого с помощью python?

Edit: Да, я знаю его не стандартный формат списка, но я не создал, винить SOLR

Edit: Почему -1, StackOverflow стал местом для мести и случайных взрыва! скажите мне, здесь люди, где я ошибаюсь?

+1

Я не нашел список, как указано выше. –

+0

@AvinashRaj yep же здесь, но это стандартный ответ solr с или без PySolr –

ответ

7

Использование slicing и zip вы можете создать Dict как так предполагается, что ваш список называется l:

dict(zip(l[::2], l[1::2])) 

l[::2] получит каждый 2-го элемента списка, начиная с индекса 0, таким же образом l[1::2] получить каждый второй элемент, начиная с индекса 1.

l = ["14008", 1, "14293", 4] 
l[::2] # ['14008', '14293'] 
l[1::2] # [1, 4] 

Эти два списка затем zip пед вместе, чтобы создать Dict.

EDIT Как указано в комментариях, ключи также должны быть строками, поэтому мы можем использовать map, чтобы преобразовать их. Код станет:

dict(zip(l[::2], map(str, l[1::2]))) 
+2

Можете добавить «карту (str, ....)» ко второй части, чтобы точно соответствовать желаемому результату. –

+0

Броу вау! спасибо за потрясающий ответ! –

+0

@ A-NirVaan Bro, пожалуйста, добавьте точный ввод в первую очередь. –

2

Вы можете использовать zip и dict для обращенного в список ожидаемого словаря:

>>> l=[ "14008",1,"14293",4,] 
>>> dict(zip(l[::2],l[1::2])) 
{'14008': 1, '14293': 4} 
+0

Спасибо @kasra действительно оценили –

+1

@ A-NirVaan, пожалуйста! – Kasramvd

1

Другой способ заключается в использовании Dict понимания.

l = ["14008", 1, "14293", 4] 
{l[i*2]: l[i*2+1] for i in range(int(len(l)/2))} 
+0

Спасибо Mika ji, действительно appreeciate –