在python中创建给定字符串的dict的最佳方法

时间:2013-09-02 08:37:39

标签: python parsing dictionary

我正在尝试使用此字符串创建值的字典

'idle (images=green:200, inpadoc=green:60, other=green:1000, retrieval=green:200, search=green:30)'

输出:

{'images':['green', 200], 'inpadoc':['green', 60],...}

什么是最好的通用解决方案?

谢谢!

5 个答案:

答案 0 :(得分:1)

请试试这个:

def main():
    x = 'idle (images=green:200, inpadoc=green:60, other=green:1000, retrieval=green:200, search=green:30)'
    x= x.replace("idle (", "")
    x= x.replace(")", "")
    tmp = x.split(',')

    tmp2 = dict( i.split('=') for i in tmp )

    for item in tmp2:        
        tmp2[item] = tmp2[item].split(":")

    print tmp2  


if __name__ == '__main__':
    main()

答案 1 :(得分:0)

首先删除'ìdle ('位。然后在', '上拆分,然后在'='上拆分,然后拆分为':'

答案 2 :(得分:0)

str = 'idle (images=green:200, inpadoc=green:60, other=green:1000, retrieval=green:200, search=green:30'
str = str.split('(')[1]
dict = {}
for sublist in str.split(','):
    split1 = sublist.split('=')
    split2 = split1[1].split(':')
    dict[split1[0]] = [split2[0],int(split2[1])]

print dict

输出

{'images': ['green', 200], ' other': ['green', 1000], ' search': ['green', 30], ' retrieval': ['green', 200], ' inpadoc': ['green', 60]}

答案 3 :(得分:0)

您可以使用:

# Get rid of unwanted part of the string
text='idle (images=green:200, inpadoc=green:60, other=green:1000, retrieval=green:200, search=green:30)'
text = text[text.find(' ')+1:].strip('()')

# Define the converter function
def converter(string):
    [key,value] = string.split('=') # Split into ['images','green:200']
    value = value.split(':') # Split into ['images',['green','200']]
    value[1] = int(value[1]) # Convert the number into int ['images',['green':200]]
    return [key,value]

print dict(map(converter,text.split(', ')))

首先,你摆脱了'空闲'和括号。

然后定义将每个条目(images=green:200)转换为双元素列表(['images',['green',200]])的函数,该列表将使用dict函数自动转换为字典。< / p>

使用map函数比迭代列表更快,这是Python的魅力。

编辑:

哎呀,显然使用这个map函数并不比简单地迭代列表快。

import time
startTime = time.time()
for i in range(100000):
    dict(map(converter,text.split(', ')))
print 'Done in %.3fs' % (time.time()-startTime)
# Done in 1.703s

startTime = time.time()
for i in range(100000):
    result = {}
    for element in text.split(', '):
        [key,value] = element.split('=')
        value = value.split(':')
        value[1] = int(value[1])
        result[key] = value
print 'Done in %.3fs' % (time.time()-startTime)
# Done in 1.405s

但您可以选择。 = d

答案 4 :(得分:0)

original = 'images=green:200,inpadoc=green:60,other=green:1000,retrieval=green:200,search=green:30'
parsed = {}
for e in original.split(','):
    split = e.split('=')
    parsed[split[0]] = split[1].split(':')

我希望这对你来说足够可读。这个解决方案类似于我之前所有这些人给出的解决方案,但它仍然是一个有趣的咖啡休息运动:)