首页 > 解决方案 > 如何将字符串转换为字典,如果相同的键出现两次,则将其值设为列表

问题描述

s = 'o=foo t=bar t=baz f=zap'

如何将此字符串转换为dict,但如果重复相同的键,则将其作为列表?

期待:

{'o': 'foo', 't': ['bar','baz'], 'f': 'zap'}

试过:

>>> dict(token.split('=') for token in shlex.split(s))
{'o': 'foo', 't': 'baz', 'f': 'zap'}

标签: pythonpython-3.x

解决方案


您可以定义一个函数并传递一个生成器:

s = 'o=foo t=bar t=baz f=zap'
q = 'o=foo t=bar t=baz t=bop f=zap'

def dict_fromitems(items):

    d = dict()
    for (k, v) in items:
        if k in d:
            d[k] = (d[k] if type(d[k])==list else [d[k]]) + [v]
        else:
            d[k] = v
    return d

s_dict = dict_fromitems((i.split('=') for i in s.split()))
q_dict = dict_fromitems((i.split('=') for i in q.split()))

回报:

{'o': 'foo', 't': ['bar', 'baz'], 'f': 'zap'}
{'o': 'foo', 't': ['bar', 'baz', 'bop'], 'f': 'zap'}

推荐阅读