回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个包含变量名和值的字符串。名称和值之间没有指定的分隔符,名称可能包含下划线,也可能不包含下划线。你知道吗</p>
<pre><code>string1 = 'Height_A_B132width_top100.0lengthsimple0.00001'
</code></pre>
<p>我想把变量放到字典里:</p>
<pre><code># desired output: dict1 = {'Height_A_B': 132, 'width_top': 100.0, 'lengthsimple': 0.00001}
</code></pre>
<p>尝试以下itertools方法</p>
<p>输入1:</p>
<pre><code>from itertools import groupby
[''.join(g) for _, g in groupby(string1, str.isdigit)]
</code></pre>
<p>输出1:</p>
<pre><code>['Height_A_B', '132', 'width_top', '100', '.', '0', 'lengthsimple', '0', '.', '00001']
</code></pre>
<p>下面应该差不多到了,但是iPython解释器告诉我str属性不存在(它在文档中)。不管怎样。。。你知道吗</p>
<p>输入2:</p>
<pre><code>[''.join(g) for _, g in groupby(string1, str.isnumeric)]
</code></pre>
<p>输出2:</p>
<pre><code>---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-25-cf931a137f50> in <module>()
----> 1 [''.join(g) for _, g in groupby(string1, str.isnumeric)]
AttributeError: type object 'str' has no attribute 'isnumeric'
</code></pre>
<p>不管怎样,如果这个数字包含一个带“+”或“-”符号的指数,会发生什么?你知道吗</p>
<pre><code>string2 = 'Height_A132width_top100.0lengthsimple1.34e+003'
# desired output: dict2 = {'Height_A_B': 132, 'width_top': 100.0, 'lengthsimple': 1.34e+003}
</code></pre>
<p>输入3:</p>
<pre><code>[''.join(g) for _, g in groupby(string2, str.isdigit)]
</code></pre>
<p>输出3:</p>
<pre><code>['Height_A', '132', 'width_top', '100', '.', '0', 'lengthsimple', '1', '.', '34', 'e+', '003']
</code></pre>
<p>我想知道,如果有人有一个优雅的解决方案?你知道吗</p>
<p><strong>更新:</strong>
下面有一些关于保留数值变量类型的讨论(例如int、float等)。事实上,string2中的科学表示法有点像是一条红鲱鱼,因为如果你创建一个变量</p>
<pre><code>>>> a = 1.34e+003
</code></pre>
<p>你得到了吗</p>
<pre><code>>>> print a
1340.0
</code></pre>
<p>不管怎样,产生一个1.34+003的字符串的几率很低。你知道吗</p>
<p>所以string2是一个更合适的测试用例,如果我们把它改成</p>
<pre><code>string2 = 'Height_A132width_top100.0lengthsimple1.34e+99'
</code></pre>