2017-02-06 1 views
1

Я написал что-то вроде этого, чтобы преобразовать список, разделенный запятой, в dict.Преобразование разделенного двоеточием списка в dict?

def list_to_dict(rlist) : 
    rdict = {} 
    i = len (rlist) 
    while i: 
     i = i - 1 
     try : 
      rdict[rlist[i].split(":")[0].strip()] = rlist[i].split(":")[1].strip() 
     except : 
      print rlist[i] + ' Not a key value pair' 
      continue 


    return rdict 

нет способ

for i, row = enumerate rlist 
    rdict = tuple (row) 

или что-то?

+3

Можете ли вы привести пример ввода и ожидаемого выхода? Список, разделенный двоеточиями, не имеет большого смысла, списки разделяются, будучи набором отдельных элементов, им не нужен разделитель. –

+0

'{item.split (": ") для элемента в rlist, если": "в элементе}'. Если это не работает, возможно, поместите 'tuple (item.split (": "))'. Если это не ленивый медленный путь' {item.split (":") [0]: item.split (":") [1] для элемента в rlist} 'Также потому, что это преобразование строки в словарь в 'ast.literaleval' и json. – HashSplat

+0

... или, возможно, вы пытаетесь прочитать файл в формате CSV, и в этом случае использование [csv module] (https://docs.python.org/3/library/csv.html), вероятно, является лучшим способом. – spectras

ответ

1

Если я правильно понимаю ваши требования, вы можете использовать следующий однострочный вкладыш.

def list_to_dict(rlist): 
    return dict(map(lambda s : s.split(':'), rlist)) 

Пример:

>>> list_to_dict(['alpha:1', 'beta:2', 'gamma:3']) 
{'alpha': '1', 'beta': '2', 'gamma': '3'} 

Вы можете strip() ключи и значения после расщепления, чтобы обрезать бело-пространство.

return dict(map(lambda s : map(str.strip, s.split(':')), rlist)) 
+0

как полоса с этим расколом? – Victor

+0

@Victor Существует несколько способов сделать это, но лично я просто применил бы другой 'map()'. Я отредактировал свой ответ соответственно. – 5gon12eder

0

Вы можете сделать:

>>> li=['a:1', 'b:2', 'c:3'] 
>>> dict(e.split(':') for e in li) 
{'a': '1', 'c': '3', 'b': '2'} 
0

Вы упоминаете как двоеточие и запятые поэтому, возможно, у вас есть строка с ключом/значений пар, разделенных запятыми, и с ключом и значением в свою очередь, разделенных двоеточиями , так:

def list_to_dict(rlist): 
    return {k.strip():v.strip() for k,v in (pair.split(':') for pair in rlist.split(','))} 

>>> list_to_dict('a:1,b:10,c:20') 
{'a': '1', 'c': '20', 'b': '10'} 
>>> list_to_dict('a:1, b:10, c:20') 
{'a': '1', 'c': '20', 'b': '10'} 
>>> list_to_dict('a : 1  , b: 10, c:20') 
{'a': '1', 'c': '20', 'b': '10'} 

Это использует словарь понимание итерация выражения генератора, чтобы создать словарь, содержащий пары ключ/значение, извлеченные из строки. strip() вызывается клавишами и значениями, чтобы обрабатывать пробелы.

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

  • Нет связанных вопросов^_^