2011-03-01 139 views
4

我想將諸如'a = b,a = c,a = d,b = e'的字符串轉換爲列表的字典{'a':['b' ,'c','d'],'b':['e']}。創建字符串列表的字典

我目前的解決辦法是這樣的:

def merge(d1, d2): 
    for k, v in d2.items(): 
     if k in d1: 
      if type(d1[k]) != type(list()): 
       d1[k] = list(d1[k]) 
      d1[k].append(v) 
     else: 
      d1[k] = list(v) 
    return d1 

record = 'a=b,a=c,a=d,b=e' 

print reduce(merge, map(dict,[[x.split('=')] for x in record.split(',')])) 

,我敢肯定是過於複雜。

任何更好的解決方案?

回答

13
d = {} 
for i in 'a=b,a=c,a=d,b=e'.split(","): 
    k,v = i.split("=") 
    d.setdefault(k,[]).append(v) 
print d 

,或者,如果你正在使用python> 2.4,可以使用defaultdict

from collections import defaultdict 

d = defaultdict(list) 
for i in 'a=b,a=c,a=d,b=e'.split(","): 
    k,v = i.split("=") 
    d[k].append(v) 
print d 
6
>>> result={} 
>>> mystr='a=b,a=c,a=d,b=e' 
>>> for k, v in [s.split('=') for s in mystr.split(',')]: 
...  result[k] = result.get(k, []) + [v] 
... 
>>> result 
{'a': ['b', 'c', 'd'], 'b': ['e']} 
0

......怎麼

STR = "a=c,b=d,a=x,a=b" 
d = {} # An empty dictionary to start with. 

# We split the string at the commas first, and each substr at the '=' sign 
pairs = (subs.split('=') for subs in STR.split(',')) 

# Now we add each pair to a dictionary of lists. 
for key, value in pairs: 
    d[key] = d.get(key, []) + [value] 
0

使用正則表達式允許做兩個拆分工作只有一個:

import re 

ch ='a=b,a=c ,a=d, b=e' 

dic = {} 
for k,v in re.findall('(\w+)=(\w+)\s*(?:,|\Z)',ch): 
    dic.setdefault(k,[]).append(v) 

print dic