拆分一个分号 - 在字符串中用等号分隔

Splitting a semicolon-separated with equal in a string

代码如下:

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

我想了解这是如何工作的。是先for循环还是先split?

词典列表

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

dict 被传递给生成器表达式,它通过首先调用 s.split(";") 生成列表序列,然后为每个值生成 item.split("=") 的结果首先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 都可以接受相同类型的 key/value 对序列参数。


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

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(";"))

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

使用 repl,您可以 运行 逐步执行程序的各个部分:

  1. s.split(";") 会给你 ['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
  1. item.split("=") for item in s.split(";") 会给你一个 python generator 从第 1 步开始迭代列表并将其拆分像这样进入较小的列表:
[['Name1', 'Value1'], ['Name2', 'Value2'], ['Name3', 'Value3']]
  1. 最后 dict(...) 将把它们变成 python 字典中的键值对,如下所示:
{'Name1': 'Value1', 'Name2': 'Value2', 'Name3': 'Value3'}

如果你这样写,你可能会更好地理解正在发生的事情。

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"])

首先,它从有分号的地方拆分文本。这样,我们创建了一个包含三个元素的列表,如“semicolon_sep”:

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

然后,它会循环遍历此列表,以在有“=”的地方分隔每个项目。这样,每个项目(名称和值)都有 2 列。通过将此列表 (equal_sep) 放入 dict() 中,我们将列表更改为字典。