Есть странное строковое представление вроде
< Сильный > " key1 : значение1 : key2 : значение2 : ключ3 : value3 ... Keyn : valuen "
Мне нужно создать дикт, и это довольно легко решить, если у вас есть запятые, однако здесь есть только двоеточия, и вам нужно разбивать строку через каждую вторую двоеточие. Код с циклом или что-то в этом роде выглядит довольно уродливо, поэтому мне интересно, не могли бы вы помочь мне с oneliner.
2 ответа
Вы можете просто разделить двоеточия, получить итератор над токенами и zip
итератор сам с собой. Это будет красиво сочетать ключи и значения:
s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
it = iter(s.split(':'))
dict(zip(it, it))
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}
Если вам неудобно с iter (и решениями schwobaseggls, которые я считаю превосходными), вы можете использовать сжатые списки срезов почти таким же образом:
s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
splitted = s.split(':')
# even_elements = splitted[::2] - take every 2nd starting at 0th index
# odd_elements = splitted[1::2] - take every 2nd startIng at 1st index
k = {k:v for k,v in zip(splitted[::2],splitted [1::2]) }
print(k)
Выход:
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}
Альтернативно, вы создаете диктат вручную:
s = 'key1:value1:key2:value2:key3:value3:keyn:valuen'
splitted = s.split(':')
d ={}
# this generates 2-slices from the list and puts them into your dict
for k,v in (splitted[i:i+2] for i in range(0,len(splitted),2)):
d[k] = v
# or d = { k:v for k, v in (splitted[i:i+2] for i in range(0,len(splitted),2) )}
# or d = dict(splitted[i:i+2] for i in range(0,len(splitted),2) )
print(d)
Выход:
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'keyn': 'valuen'}
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.