首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中高效地根据多个条件拆分文本?

如何在python中高效地根据多个条件拆分文本?
EN

Stack Overflow用户
提问于 2021-06-18 18:25:23
回答 3查看 63关注 0票数 0

嘿,所以我期待用户以这种方式输入:

代码语言:javascript
运行
复制
1 = 20,
2 = 14,
3-5 = 10

现在我想要的是一个字典:

代码语言:javascript
运行
复制
{1:20,
2:14,
3:10,
4:10,
5:10}

我想用,=来划分用户输入,所以我做到了:

代码语言:javascript
运行
复制
for i in points.replace('\n','').split(','):
  yield i.split("=")

我得到了包含两个元素的列表:

代码语言:javascript
运行
复制
['1 ', ' 20']
['2 ', ' 14']
['3-5 ', ' 10']

所有这一切都很顺利,但我遇到的是第三个列表(['3-5 ', ' 10']),我希望将它转换为一个范围,这样我就可以得到我想要的最终判决,我可以想出一些老生常谈的方法,但我不认为我遵循的是我试图在这里实现的最佳方法。你能给我推荐一个更好更有效的方法吗?

谢谢:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-18 18:49:45

像这样的东西?

代码语言:javascript
运行
复制
result = {}
for line in points.replace('\n', '').split(','):
    line_values = [value.strip() for value in line.split('=')]
    if '-' in line_values[0]:
        range_idx = line_values[0].split('-')
        num_range = [i for i in range(int(range_idx[0]), int(range_idx[1])+1)]
        for key in num_range:
            result[key] = int(line_values[1])
    else:
        result[int(line_values[0])] = int(line_values[1])

字典'result‘是用整数填充的。

票数 0
EN

Stack Overflow用户

发布于 2021-06-18 18:45:26

我认为这应该是这样的。需要对键进行迭代。

代码语言:javascript
运行
复制
result = {}
for i in points.replace('\n','').split(','):
  if "-" not in i:
    splitted = i.split("=")
    result[str(splitted[0])] = str(splitted[1])
  else:
      i_split = i.split("=")
      new_range = i_split[0].split("-")
      for j in range(int(new_range[0], int(new_range[1] + 1)):
        result[str(j)] = str(i_split)

print("Here yours: ", result)

注意:我是在字符串中实现的,如果你需要整型,只要把str()改成int()即可

票数 0
EN

Stack Overflow用户

发布于 2021-06-18 18:48:54

你可以参考下面的代码

代码语言:javascript
运行
复制
#===== if you want, you can do this too.
points="1 = 20,\n2 = 14,\n3-5 = 10"
x=[]
for i in points.split(','):
    x.append(i.strip("\n").split("="))
#=====
x=[['1 ', ' 20'],
['2 ', ' 14'],
['3-5 ', ' 10']]
dic1={}
for i in x:
    if "-" in i[0]:
        i2=i[0].split("-")
        for j in range(int(i2[0]), int(i2[1])+1):
            dic1.update({j:i[1]})
    else:
        dic1.update({i[0]:i[1]})
print(dic1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68033517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档