один список в словарь - PullRequest
       6

один список в словарь

3 голосов
/ 26 октября 2010

У меня есть этот список:

single = ['key1', 'value1', 'key2', 'value2', 'key3', 'value3']

Какой лучший способ создать словарь из этого?

Спасибо.

Ответы [ 6 ]

9 голосов
/ 26 октября 2010
>>> single = ['key1', 'value1', 'key2', 'value2', 'key3', 'value3']
>>> dict(zip(single[::2], single[1::2]))
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
7 голосов
/ 26 октября 2010

Аналогично решению SilentGhost, без создания временных списков:

>>> from itertools import izip
>>> single = ['key1', 'value1', 'key2', 'value2', 'key3', 'value3']
>>> si = iter(single)
>>> dict(izip(si, si))
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
2 голосов
/ 26 октября 2010

Это самое простое, я думаю. Вы увидите больше волшебства в решении здесь, используя понимание списка и т.д.

dictObj = {}
for x in range(0, len(single), 2):
    dictObj[single[x]] = single[x+1]

Выход:

>>> single = ['key1', 'value1', 'key2', 'value2', 'key3', 'value3']
>>> dictObj = {}
>>> for x in range(0, len(single), 2):
...     dictObj[single[x]] = single[x+1]
... 
>>> 
>>> dictObj
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
>>> 
0 голосов
/ 26 октября 2010

Вы не указали ни одного критерия "лучший".Если вам нужна понятность, простота, легко модифицируемая для проверки на наличие дубликатов и нечетного количества входных данных, работает с любой итерацией (в случае, если вы не можете определить длину заранее), НЕ ИСПОЛЬЗУЕТСЯ ДОПОЛНИТЕЛЬНАЯ ПАМЯТЬ, ... попробуйте это:

def load_dict(iterable):
    d = {}
    pair = False
    for item in iterable:
        if pair:
            # insert duplicate check here
            d[key] = item
        else:
            key = item
        pair = not pair
    if pair:
        grumble_about_odd_length(key)
    return d
0 голосов
/ 26 октября 2010
>>> single = ['key', 'value', 'key2', 'value2', 'key3', 'value3']
>>> dict(zip(*[iter(single)]*2))
{'key3': 'value3', 'key2': 'value2', 'key': 'value'}

Вероятно, не самая читаемая версия;)

0 голосов
/ 26 октября 2010
L = ['key1', 'value1', 'key2', 'value2', 'key3', 'value3']
d = dict(L[n:n+2] for n in xrange(0, len(L), 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...