在字符串中分割以等号分隔的分号



下面是代码:

s= "Name1=Value1;Name2=Value2;Name3=Value3"
dict(item.split("=") for item in s.split(";"))

我想了解这是如何工作的。它会先执行for循环还是先分裂?

字典列表

s1= "Name1=Value1,Name2=Value2,Name3=Value3;Name1=ValueA,Name2=ValueB,Name3=ValueC"

如果您安装了python,我建议使用它的交互式repl

使用repl,您可以一步一步地运行程序的部分:

  1. s.s split(";")将返回['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
  1. item.split("=") for item.split(";")将为您提供一个python生成器,该生成器从步骤1开始迭代列表,并将其拆分为如下所示的更小列表:
[['Name1', 'Value1'], ['Name2', 'Value2'], ['Name3', 'Value3']]
  1. 最后,dict(…)将在python字典中将它们转换为键值对,如下所示:
{'Name1': 'Value1', 'Name2': 'Value2', 'Name3': 'Value3'}

dict正在被传递一个生成器表达式,该表达式通过首先调用s.split(";")来生成一个列表序列,然后为第一个split的结果中的每个值生成item.split("=")的结果。更详细的版本:

s = "..."
d = dict()
name_value_pairs = s.split(";")
for item in name_value_pairs:
name_value = item.split("=")
d.update([name_value])

我使用d.update而不是简单的d[x] = y,因为dictd.update都可以接受相同类型的键/值对序列作为参数。


从这里,我们可以通过每次消除一个临时变量来重建原始的

s = "..."
d = dict()
for item in s.split(";"):
name_value = item.split("=")
d.update(name_value)

s = "..."
d = dict()
for item in s.split(";"):
d.update([item.split("=")])

s = "..."
d = dict(item.split("=") for item in s.split(";"))

如果你这样写,你可能会更好地理解发生了什么。

s= "Name1=Value1;Name2=Value2;Name3=Value3"
semicolon_sep = s.split(";")
equal_sep = [item.split("=") for item in semicolon_sep]
a = dict(equal_sep)
print(a["Name1"])

首先,它从有分号的地方分割文本。通过这种方式,我们创建了一个包含三个元素的列表:"分号_sep":

>>> print(semicolon_sep)
['Name1=Value1', 'Name2=Value2', 'Name3=Value3']

然后,它在这个列表上做一个循环,在有"="的地方分离每个项。这样,每个项目有2列(Name和Value)。通过将这个列表(equal_sep)放在dict()中,我们将列表更改为字典。

相关内容

  • 没有找到相关文章

最新更新