2015-04-25 6 views
-3

Пожалуйста, помогите мне со следующей проблемой: у меня есть строки и значения, связанные с комой, связанные с этими строками. Количество комов непредсказуемо и может быть ограничено на 6. Я должен преобразовать его в словарь python. Например:Как преобразовать строку с разделителями комы в словарь python?

aa.bb.cc 6 => mydict['aa']['bb']['cc']=6 
aa.bb.dd.ee 8 = mydict['aa']['bb']['dd']['ee']=8 

Мой питон версия 2.7.9

+0

Хотите вложенные словари (как показано) или один словарь со всеми полями в качестве ключей? – cdarke

ответ

1

Один из способов сделать это заключается в использовании defaultdict

from collections import defaultdict as defd 
dic = defd(dict) 

def create_dict(astr): 
    keys, val = astr.split(' ') 
    keys = keys.split('.') 
    val = int(val) 
    prevdic = dic 
    for j, k in enumerate(keys): 
     if j == len(keys)-1: 
      prevdic[k] = val 
     elif k not in prevdic: 
      prevdic[k] = defd(dict) 
     prevdic = prevdic[k] 

create_dict('aa.bb.cc 6') 
create_dict('aa.bb.dd.ee 8') 
dic['aa']['bb']['cc'] ## returns 6 
dic['aa']['bb']['dd']['ee'] ## returns 8 
+0

Отлично, именно то, что я ищу. Большое спасибо. –

+0

Добро пожаловать :-) –

-1

Вы можете попробовать следующий простой код

str1 = 'aa.bb.cc 6' 
str2 = 'aa.bb.cc.dd 8' 
dictstr = {} 
strdelim = str1.split(' ') 
dictstr[tuple(strdelim[0].split('.'))] = strdelim[1] 
strdelim = str2.split(' ') 
dictstr[tuple(strdelim[0].split('.'))] = strdelim[1] 
print dictstr 

Результат

{('aa', 'bb', 'cc'): '6', ('aa', 'bb', 'cc', 'dd'): '8'} 
0

Я предполагаю, что вы хотите один словарь с несколькими ключами (вы говорите " словарь"):

import re 

s1 = 'a.bb.dd.ee 8' 
s2 = 'aa.bb.cc 6' 

def create_d(s): 
    fields = re.split(r'[. ]', s) 
    v = int(fields.pop()) 

    d = { field:v for field in fields } 
    return d 

mydict = create_d(s1) 
print mydict 

mydict.update(create_d(s2)) 
print mydict 

Дает:

{'a': 8, 'ee': 8, 'dd': 8, 'bb': 8} 
{'a': 8, 'aa': 6, 'bb': 6, 'ee': 8, 'dd': 8, 'cc': 6} 
Смежные вопросы