2013-03-04 54 views
3

我有一个字符串的元组,我想通过使用分隔符分割每个元素来将其转换为字典。这可能与字典理解?如何将“x = y”字符串的元组解析为python中的字典?

>>> x = ('var1=abc', 'var2=xyz', 'var3=10') 
>>> y = {k: v for (k, v) in ???} # this is where I need your help 
>>> print y 
{ "var1": "abc", "var2": "xyz", "var3": "10" } 

这既是一个学习的过程是什么 - 所以请不要做它的另一种方式回答(我有很多这样的) - 我想知道这是否是可能的字典解析。

[UPDATE]

有,我没有写下第一稍微修改 - 我需要从每个值的端部条的外来换行字符。

>>> x = ('var1=abc\n', 'var2=xyz\n', 'var3=10') 
>>> d = {k: v.strip('\n') for (k, v) in [e.split('=') for e in x]} 
>>> d 
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'} 

(当然,现在不是以相同的顺序 - 但是我可以忍受哎呀。)

+0

首先 - 这是我见过的最快的一个问题 - 我实际上在大约2分钟内完成了自己的工作,到那时我有三个答案。令人惊叹的东西 - 做得很好,但Martijn获得第一名。 – 2013-03-04 16:46:49

+0

以此速度,Martijn将*总是*得分。 :) – 2013-03-04 16:47:55

+0

我已经upvoted所有正确的答案,以及:-) – 2013-03-04 16:49:26

回答

5

你不得不两次拆分每个字符串,但肯定的,这是可以做到:

{elem.split('=', 1)[0]: elem.split('=', 1)[1].strip() for elem in x} 

结果:

>>> x = ('var1=abc\n', 'var2=xyz\n', 'var3=10') 
>>> {elem.split('=', 1)[0]: elem.split('=', 1)[1].strip() for elem in x} 
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'} 

为了避免分裂两次,用生成的表达和dict() CON结构代替:

dict(elem.strip().split('=', 1) for elem in x) 

因为它需要一个二值元组序列。

+0

你可以使用一个字典+列表理解'{i [0]:i [1]在[p.split('=',1)for p in x]}(我确定有一个更好的方式来写也:) – 2013-03-04 16:44:51

+0

@JonathanVanasco:但这是一个双循环。我非常确定,调用两次拆分将会在任何一天打败嵌套双循环。 :-) – 2013-03-04 16:46:38

+0

并使用简单的'dict()'敲打。:) – 2013-03-04 16:47:01

1
>>> x = ('var1=abc', 'var2=xyz', 'var3=10') 
>>> dict([element.split('=') for element in x]) 
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'} 
4

使用dict()构造

dict(elem.split('=', 1) for elem in x) 

在行动:

>>> x = ('var1=abc', 'var2=xyz', 'var3=10') 
>>> dict(elem.split('=', 1) for elem in x) 
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'} 

注:字典是无序的,所以你不会得到你想要的确切结果