3

我有一个字符串元组,我想通过使用分隔符拆分每个元素来将其转换为字典。这可以通过字典理解来实现吗?

>>> 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" }

这与任何事情一样都是一个学习练习——所以请不要用其他方法来回答(我有很多)——我想知道它是否可以通过字典理解来回答。

[更新]

有一个我没有先写下来的轻微修改 - 我需要从每个值的末尾删除一个无关的换行符。

>>> 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'}

(当然,现在顺序不同了——但我可以忍受。Grrr。)

4

3 回答 3

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()构造函数:

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

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

于 2013-03-04T16:40:16.387 回答
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'}

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

于 2013-03-04T16:42:50.390 回答
1
>>> x = ('var1=abc', 'var2=xyz', 'var3=10')
>>> dict([element.split('=') for element in x])
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'}
于 2013-03-04T16:41:59.033 回答