擅长:python、mysql、java
<p>为了简单起见,使用<code>StringIO</code>实例:</p>
<pre><code>import io
fobj = io.StringIO("""str11 str12 str13
str21 str22
str31 str32 str33 str34""")
</code></pre>
<p>一行就行了:</p>
<pre><code>>>> {line.split(None, 1)[0]: tuple(line.split()[1:]) for line in fobj}
{'str11': ('str12', 'str13'),
'str21': ('str22',),
'str31': ('str32', 'str33', 'str34')}
</code></pre>
<p>注意<code>line.split(None, 1)</code>。这将拆分限制为一个项目,因为在dict理解中必须使用<code>.split()</code>两次。我们不能像在循环中那样存储中间结果以供重用。<code>None</code>表示在任何空格处拆分。你知道吗</p>
<p>对于<code>OrderedDict</code>,您还可以使用生成器表达式避开一行:</p>
<pre><code>from collections import OrderedDict
>>> OrderedDict((line.split(None, 1)[0], tuple(line.split()[1:]))
for line in fobj)
OrderedDict([('str11', ('str12', 'str13')), ('str21', ('str22',)),
('str31', ('str32', 'str33', 'str34'))])
</code></pre>