我有一个文件,其中每一行都是一个如下所示的字符串:
s='elem1 elem2 elem3 elem4 elem5'
我需要将此字符串解析为字典。问题是我希望字典看起来像这样
d={key1:elem1;key2:elem2;key3:elem3;key4:{elem4,elem5}}
elem3之后的元素数量是可变的:可以只有elem4或者可以是elem4-elem10。
我知道我可以使用一些嵌套的for和while循环以及一个向键添加元素的计数器,直到它达到大于3的数字,但我在想是否有更多的pythonic方式这样做。
另外,如果文件很大,我应该坚持列表并将elem4-elemn放入元组中吗?
答案 0 :(得分:1)
这将在Python 2和Python 3中实现您想要的功能:
s = 'elem1 elem2 elem3 elem4 elem5'
v1, v2, v3, vrest = s.split(None, 3)
d = { 'key1': v1, 'key2': v2, 'key3': v3, 'key4': vrest.split() }
最后,d
将是:
{'key1': 'elem1', 'key3': 'elem3', 'key2': 'elem2', 'key4': ['elem4', 'elem5']}
(键因为dict
的工作原理而无序。请注意与key4关联的变量列表的不同语法。)
在Python 3中,有一种更优雅的方式:
v1, v2, v3, *vrest = s.split()
d = { 'key1': v1, 'key2': v2, 'key3': v3, 'key4': vrest }
这利用了"广义的解包操作"抓住"其余的价值观"进入vrest
。但它只适用于Python 3。