python - 如何从原始数据字符串制作字典

标签 python

基本上我需要从一串数据创建一个字典

鉴于:

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/

相关文章:

Python曲线拟合与无限求和

python - QAbstractItemModel 和 QModelIndex 之间的相互作用

python - Pycharm调试-使用 watch 保存变量

python pandas DataFrame 遍历行并比较两列并应用函数

Python 字符串与相应索引匹配

Python 等同于 hive 数值直方图

python - 运行 Python 程序时出错 : com_error: (-2147023174, 'The RPC server is unavailable.' , None, None)

python - 使用 selenium webdriver 获取浏览器版本

python - 如何以笛卡尔积的形式为现有数据框设置索引?

python - PyQt 防止 QInputDialog 在 ESC/Enter 交叉单击时关闭