Строка, чтобы диктовать разбор без запятых - PullRequest
0 голосов
/ 22 октября 2018

Есть странное строковое представление, такое как

"ключ1: значение1: ключ2: значение2: ключ3: значение3 ... ключ: значение"

Мне нужносоздайте диктовку, и это довольно легко решить, если у вас есть запятые, однако здесь есть только двоеточия, и вам нужно разбивать строку через каждую вторую двоеточие.Код с циклом или что-то в этом роде выглядит довольно уродливо, поэтому мне интересно, не могли бы вы помочь мне с oneliner.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Если вам неудобно с 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'}
0 голосов
/ 22 октября 2018

Вы можете просто разделить двоеточия, получить итератор по токенам и 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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...