Python 给定这个字符串输入,我如何生成这个给定的输出?
我想把上面的字符串转换成下面的格式化字典。间距和额外的文本是故意这样的。应删除/去除间距和注释文本Python 给定这个字符串输入,我如何生成这个给定的输出?,python,python-3.x,Python,Python 3.x,我想把上面的字符串转换成下面的格式化字典。间距和额外的文本是故意这样的。应删除/去除间距和注释文本 s = """ ID# VALUE_1 VALUE_2 1 0.1 300 2 0.2 400 (11 - this text is part of C in row 2 but needs to be ignored / removed) 3 0.9 600""" 到目前为止,我所尝试的:
s = """
ID# VALUE_1 VALUE_2
1 0.1 300
2 0.2 400 (11 - this text is part of C in row 2 but needs to be ignored / removed)
3 0.9 600"""
到目前为止,我所尝试的:
print(my_dict)
{'1': {'VALUE_1': '0.1', 'VALUE_2': '300'}, '2': {'VALUE_1': '0.2', 'VALUE_2': '400'}, '3': {'VALUE_1': '0.9', 'VALUE_2': '600'}}
这最终会输出一个外观丑陋的未格式化字典:
s = """
ID# VALUE_1 VALUE_2
1 0.1 300
2 0.2 400 (11 - this text is part of C in row 2 but needs to be ignored / removed)
3 0.9 600"""
#Get the columns and assign them to a variable.
columns = s.lstrip().splitlines()[0] #Print the first line of the string
dct = {}
rows = s.lstrip().splitlines()
for data in rows[1:]:
row = data.split()
dct[row[0]] = dict(zip(columns[1:], row[1:]))
print(dct)
我无法在当前循环过程中成功地去除第2行上的空格和额外数据块。您的代码中有一个小错误
{'1': {'D': '0.1', '#': '300'}, '2': {'D': '0.2', '#': '400', ' ': 'in', 'V': 'row', 'A': '2', 'L': 'but', 'U': 'needs', 'E': 'to', '_': 'be', '1': 'C', '2': 'ignored'}, '3': {'D': '0.9', '#': '600'}}
没有列出清单。使用:
columns = s.lstrip().splitlines()[0]
进行此修改后,您的代码应该可以正常运行
此外,即兴创作,你根本不应该使用专栏。只需将其替换为行[0]。代码中有一个小错误
{'1': {'D': '0.1', '#': '300'}, '2': {'D': '0.2', '#': '400', ' ': 'in', 'V': 'row', 'A': '2', 'L': 'but', 'U': 'needs', 'E': 'to', '_': 'be', '1': 'C', '2': 'ignored'}, '3': {'D': '0.9', '#': '600'}}
没有列出清单。使用:
columns = s.lstrip().splitlines()[0]
进行此修改后,您的代码应该可以正常运行
此外,即兴创作,你根本不应该使用专栏。只需将其替换为行[0]。A
regex
解决方案对我来说似乎更整洁:
检查
regex
是如何工作的一个regex
解决方案,在我看来更整洁:
检查
regex
如何工作,他们可以只使用行[0]
;将列
赋值向下移动几行,避免两次剥离和拆分。@MartijnPieters您能澄清一下吗?@IanSmith:看一下对行
和列
所做的工作。您可以使用columns=rows[0].split()
代替,以避免剥离和拆分较大的s
字符串。是的,@MartijnPieters是正确的。你看,列只是行[0],为什么要保留两次呢?@IanSmith:正是这样。他们可以只使用行[0]
;将列
赋值向下移动几行,避免两次剥离和拆分。@MartijnPieters您能澄清一下吗?@IanSmith:看一下对行
和列
所做的工作。您可以使用columns=rows[0].split()
代替,以避免剥离和拆分较大的s
字符串。是的,@MartijnPieters是正确的。你看,列只是行[0],为什么要保留两次呢?@IanSmith:完全一样。太棒了!前几天晚上我在学习一些正则表达式,看看这是否是一个可行的选择。你是凭记忆还是有工具可以帮你?regex101.com是一个很棒的工具!检查我的更新。干杯,太棒了!前几天晚上我在学习一些正则表达式,看看这是否是一个可行的选择。你是凭记忆还是有工具可以帮你?regex101.com是一个很棒的工具!检查我的更新。干杯@IanSmith