为简单起见使用StringIO
实例:
import io
fobj = io.StringIO("""str11 str12 str13
str21 str22
str31 str32 str33 str34""")
一行可以解决问题:
>>> {line.split(None, 1)[0]: tuple(line.split()[1:]) for line in fobj}
{'str11': ('str12', 'str13'),
'str21': ('str22',),
'str31': ('str32', 'str33', 'str34')}
注意line.split(None, 1)
. 这将拆分限制为一项,因为我们必须.split()
在字典理解中使用两次。我们不能像循环一样存储中间结果以供重用。表示在None
任何空白处拆分。
对于一个OrderedDict
你也可以使用生成器表达式摆脱一行:
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'))])