从字符串创建列表的字典

Chr*_*ard 4 python merge dictionary list

我想将一个字符串如'a = b,a = c,a = d,b = e'转换成列表的字典{'a':['b','c','d'],' b':Python 2.6中的['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(',')]))
Run Code Online (Sandbox Code Playgroud)

我确信这是不必要的复杂.

更好的解决方案?

Sha*_*hin 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
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是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
Run Code Online (Sandbox Code Playgroud)


koj*_*iro 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']}
Run Code Online (Sandbox Code Playgroud)