嘿,所以我期待用户以这种方式输入:
1 = 20,
2 = 14,
3-5 = 10
现在我想要的是一个字典:
{1:20,
2:14,
3:10,
4:10,
5:10}
我想用,
和=
来划分用户输入,所以我做到了:
for i in points.replace('\n','').split(','):
yield i.split("=")
我得到了包含两个元素的列表:
['1 ', ' 20']
['2 ', ' 14']
['3-5 ', ' 10']
所有这一切都很顺利,但我遇到的是第三个列表(['3-5 ', ' 10']
),我希望将它转换为一个范围,这样我就可以得到我想要的最终判决,我可以想出一些老生常谈的方法,但我不认为我遵循的是我试图在这里实现的最佳方法。你能给我推荐一个更好更有效的方法吗?
谢谢:)
发布于 2021-06-18 18:49:45
像这样的东西?
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‘是用整数填充的。
发布于 2021-06-18 18:45:26
我认为这应该是这样的。需要对键进行迭代。
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()
即可
发布于 2021-06-18 18:48:54
你可以参考下面的代码
#===== 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)
https://stackoverflow.com/questions/68033517
复制相似问题