为了账号安全,请及时绑定邮箱和手机立即绑定

将具有基于固定位置模式的原始字符串数据转换为基于对象的结构,如 JSON

将具有基于固定位置模式的原始字符串数据转换为基于对象的结构,如 JSON

素胚勾勒不出你 2023-05-19 17:07:04
我的用例如下,输入格式——总长度固定的字符串,每组固定位置代表某个值。例如。设输入为"ABCDE12345"并考虑位置 1 到 3("ABC")将代表字段 1 的值,位置 4 到 7("DE12")将代表字段 2 的值,位置 8 到 10("345")将代表字段 3 的值输出格式 - 基于对象的结构,如 JSON{"field1" : "ABC","field2" : "DE12","field3" : "345"}我的优先顺序要求是从输入格式转换为 JSON 等输出格式转换速度应尽可能快。可以相应地选择编程语言。最好是js或者python。也欢迎使用其他语言作为解决方案。(可选)我们如何尽快扩展此解决方案以实现 1000 次转换?
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

  1. 尝试这个:

string_to_dict = lambda input_str: {"field1":input_str[:3], "field2":input_str[3:7], "field3":input_str[7:]} string_to_dict("ABCDE12345")

{'field1': 'ABC', 'field2': 'DE12', 'field3': '345'}

  1. 速度取决于您的输入源。如果您有 pandas DataFrame,则可以通过使用“map”函数将此函数应用于 Series 来最大化速度:

df['stinrg_series'].map(string_to_dict)


查看完整回答
反对 回复 2023-05-19
?
UYOU

TA贡献1878条经验 获得超4个赞

如果您准备一个数据结构来表示按顺序排列的具有名称和长度的字段,则可以将其应用于字典推导式以将数据拆分为单独的键和值。然后使用json模块转换字典


from itertools import accumulate

import json


structure = [("field1",3),("field2",2),("field3",5)]      # define names and lengths

positions = [0,*accumulate(size for _,size in structure)] # computed starting positions


data      = "ABCDE12345"

dictdata  = { name:data[pos:pos+size] for (name,size),pos in zip(structure,positions) }

jsondata  = json.dumps(dictdata)


print(jsondata)

# {"field1": "ABC", "field2": "DE", "field3": "12345"}


查看完整回答
反对 回复 2023-05-19
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

你可以这样做:


function strToObj(str, interface) {

  const outObj = {};

  let index = 0;


  Object.entries(interface).forEach(([key, value]) => {

    outObj[key] = str.slice(index, index + value);

    index = value

  });


  return JSON.stringify(outObj);

}


const testStr1 = 'ABCDE12345';

const testInterface1 = {

  key1: 3, // 'key1' will become the object key and 3 indicates the number of characters to use for the value

  key2: 4,

  key3: 3

}


const testStr2 = '+15417543010';

const testInterface2 = {

  intlPrefix: 2,

  localPrefix: 3,

  phonenumber: 7

}


console.log(strToObj(testStr1, testInterface1));

console.log(strToObj(testStr2, testInterface2));

或简化版本,如果您不需要创建可重用的功能



查看完整回答
反对 回复 2023-05-19
  • 3 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信