我正在尝试使用此字符串创建值的字典
'idle (images=green:200, inpadoc=green:60, other=green:1000, retrieval=green:200, search=green:30)'
输出:
{'images':['green', 200], 'inpadoc':['green', 60],...}
什么是最好的通用解决方案?
谢谢!
答案 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(':')
我希望这对你来说足够可读。这个解决方案类似于我之前所有这些人给出的解决方案,但它仍然是一个有趣的咖啡休息运动:)