2014-10-23 2 views
-2

У меня есть файл, где каждая строка представляет собой строку, которая выглядит следующим образом:преобразование строки в словарь (с дополнительными ограничениями)

s='elem1 elem2 elem3 elem4 elem5' 

Мне нужно, чтобы разобрать эту строку в словарь. Проблема заключается в том, что я хочу в словаре посмотреть, как этот

d={key1:elem1;key2:elem2;key3:elem3;key4:{elem4,elem5}} 

Число элементов после elem3 переменная: может быть только elem4 или может быть elem4-elem10.

Я знаю, что могу сделать это с помощью нескольких вложенных и while циклов и счетчика, который добавляет элемент к ключу, пока не достигнет числа, которое больше 3, но я думал, если есть более питоновский способ сделать это.

Кроме того, если файл большой, я должен просто придерживаться списка и поместить elem4-elemn в кортеж?

+0

Сначала прочитайте ключи и значения в списках и работайте там – Frank

ответ

1

Это будет делать то, что вы хотите на обоих Python 2 и Python 3:

s = 'elem1 elem2 elem3 elem4 elem5' 
v1, v2, v3, vrest = s.split(None, 3) 
d = { 'key1': v1, 'key2': v2, 'key3': v3, 'key4': vrest.split() } 

В конце d будет:

{'key1': 'elem1', 'key3': 'elem3', 'key2': 'elem2', 'key4': ['elem4', 'elem5']} 

(Ключи от того, потому что это как dict Обратите внимание также на различный синтаксис списка переменных, связанного с ключом4.)

В Python 3 есть немного более изящный способ сделать это:

v1, v2, v3, *vrest = s.split() 
d = { 'key1': v1, 'key2': v2, 'key3': v3, 'key4': vrest } 

Это имеет преимущество в «обобщенной распаковке операции» захватывая «остальные ценности» в vrest. Но он работает только в Python 3.

Смежные вопросы