将字符串转换为字典python

时间:2014-05-01 09:43:40

标签: python dictionary

我想使用pairSeparator和keyValueSeparator将字符串转换为字典。 我将如何定义:

def stringToDictionary(s, pairSeparator, keyValueSeparator):

 ....
 ....

 return D

我想要这个结果:

s = 'potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09'    
D = stringToDictionary(s, ',', ':')
print(D)
{'sugar': 1.98, 'cereal': 5.99, 'potatoes': 2.67, 'crisps': 1.09}

3 个答案:

答案 0 :(得分:1)

分割!

只需使用拆分即可轻松解决。您可能想要添加一些错误检查,但基本上做这样的事情:

def stringToDictionary(s, pairSeparator, keyValueSeparator):
    pairs = s.split(pairSeparator)
    return dict(pair.split(keyValueSeparator) for pair in pairs)

我注意到在您的预期输出中,您将值转换为整数。为了保持这个功能的通用性,我建议允许将转换器函数传递给stringToDictionary,或者只是为了之后转换值。

答案 1 :(得分:0)

使用for循环。如果你的字符串严格遵循你提供的格式,那么这就是。

def stringToDictionary(s, pairSeparator, keyValueSeparator):
    items = s.split(pairSeparator)
    data = {}
    for item in items:
        keyvalpair = item.split(keyValueSeparator)
        data[keyvalpair[0].strip()] = float(keyvalpair[1]) # strip() removes unwanted trailing/leading spaces

    return data

print stringToDictionary("potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09", ',', ':')
编辑:这是一个像你问的功能。

答案 2 :(得分:0)

可以为自定义函数构建相同的逻辑,

>>> s = 'potatoes:2.67,sugar:1.98,cereal:5.99,crisps:1.09'.split(",")
>>> d={}
>>> for i in s:
    d[i.split(':')[0]]=float(i.split(':')[1])


>>> d
{'potatoes': '2.67', 'crisps': '1.09', 'cereal': '5.99', 'sugar': '1.98'}
>>>