基本上我需要从一串数据创建一个字典
鉴于:
data = "electron1, gamma5, proton43, boson98, ..."
d(data)
会导致:{'electron':1, 'gamma':5, 'proton':43, 'boson':98, ...}
我当前的代码显示“base 10 ...”的错误消息
def d(n):
pair = dict()
for i in range(0,n):
word = input().split()
key = word[0]
value = word[1]
pair[key]=value
print(pair)
n = int(input())
d ={}
for i in range(n):
text = input().split()
d[text[0]] = text[1]
print(d)
最佳答案
您可以使用正则表达式和 generator expression 来做到这一点。喜欢:
代码:
END_NUMS_RE = re.compile(r'^(\D+)(\d+)$')
dict(END_NUMS_RE.match(x.strip()).groups() for x in data.split(','))
测试代码:
import re
END_NUMS_RE = re.compile(r'^(\D+)(\d+)$')
data = "electron1, gamma5, proton43, boson98"
print(dict(END_NUMS_RE.match(x.strip()).groups() for x in data.split(',')))
结果:
{'electron': '1', 'gamma': '5', 'proton': '43', 'boson': '98'}
但!正则表达式:
所以对于那些担心使用正则表达式的人:
让我们在这里对正则表达式答案与投票第二多的答案进行基准测试:
import re
END_NUMS_RE = re.compile(r'^(\D+)(\d+)$')
data = "electron1, gamma5, proton43, boson98"
def method1():
return dict(END_NUMS_RE.match(x.strip()).groups()
for x in data.split(','))
def method2():
l = data.split(',')
return {
''.join(
[x for x in item if not x.isdigit()]):
int(''.join([x for x in item if x.isdigit()])) for item in l
}
from timeit import timeit
print(timeit(method1, number=10000))
print(timeit(method2, number=10000))
计时结果:
0.05789754982012146
0.10536237238963242
正则表达式的答案是快两倍。
关于python - 如何从原始数据字符串制作字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54156015/