Skip to main content
 首页 » 编程设计

Python 将特定字符串转换为字典

2025年05月04日26jpfss

string的格式是"a:1 b:2 c:x d:2.13e-5",请问有什么方法可以简单快速的转换成python dict吗?

------------编辑行------------

根据很好的答案,我尝试了几种方法(在 ipython 中):

In [6]: import re 
 
In [7]: %paste 
def f1(line): 
    item_dict = {} 
    for item in line.split(): 
        kv = item.split(':') 
        item_dict[kv[0]] = kv[1] 
 
def f2(line): 
    item_dict = {} 
    item_pat = re.compile(r'(\w+):(.+)') 
    for item in line.split(): 
        m_res = item_pat.match(item) 
        item_dict[m_res.group(1)] = m_res.group(2) 
 
def f3(line): 
    dict(item.split(':') for item in line.split()) 
## -- End pasted text -- 
 
In [8]: line = 'a:1   b:3243 dsfds:4323llsjdf         \t fdsf:3232l' 
In [9]: %timeit f1(line) 
100000 loops, best of 3: 3.99 us per loop 
 
In [10]: %timeit f2(line) 
100000 loops, best of 3: 8.83 us per loop 
 
In [11]: %timeit f3(line) 
100000 loops, best of 3: 5.19 us per loop 

第一个方法 f1() 似乎更快,但在我的应用程序中,它仍然使用很多时间(大约 30%),因为它被调用了数百万次。

有没有更有效的方法?还是 cython?

请您参考如下方法:

>>> s = "a:1 b:2 c:x d:2.13e-5" 
>>> dict( p.split(':') for p in s.split(' ') ) 
{'a': '1', 'c': 'x', 'b': '2', 'd': '2.13e-5'} 

这split s 字符串,首先是空格,以获取键值对 (p)。然后它用“:”拆分每一对以生成要添加到字典中的每个键/值。

请注意,没有发生任何转换。所有键/值仍然是字符串。为了做得比这更好,您将需要一个有点智能的函数,它将任何输入字符串转换为您期望的类型。