拆分一个分号 - 在字符串中用等号分隔
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
这样更简单的东西,因为 dict
和 d.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,您可以 运行 逐步执行程序的各个部分:
- s.split(";") 会给你 ['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
- item.split("=") for item in s.split(";") 会给你一个 python generator 从第 1 步开始迭代列表并将其拆分像这样进入较小的列表:
[['Name1', 'Value1'], ['Name2', 'Value2'], ['Name3', 'Value3']]
- 最后 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()
中,我们将列表更改为字典。
代码如下:
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
这样更简单的东西,因为 dict
和 d.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,您可以 运行 逐步执行程序的各个部分:
- s.split(";") 会给你 ['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
['Name1=Value1', 'Name2=Value2', 'Name3=Value3']
- item.split("=") for item in s.split(";") 会给你一个 python generator 从第 1 步开始迭代列表并将其拆分像这样进入较小的列表:
[['Name1', 'Value1'], ['Name2', 'Value2'], ['Name3', 'Value3']]
- 最后 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()
中,我们将列表更改为字典。