将每个文本节点映射到Python中的匿名函数
假设我将以下变量将每个文本节点映射到Python中的匿名函数,python,dictionary,Python,Dictionary,假设我将以下变量data作为字典,可以从JSON文件解析: 数据={ “导入”:[“mod1\u1251”,“mod\u2412”], “其他\u2512fos字段”:{ “名称”:“2” } } 是否可以将此数据结构中的每个节点映射到匿名函数 例如,一个例子是: data={…}#以上数据 """ map_节点将import、mod1、mod2、其他_字段、name、Jack推送到匿名字符串_fix函数中(这些是我们的节点值)。 返回后,返回被放置在适当的引用中,从而简化了在dict或对象中
data
作为字典,可以从JSON文件解析:
数据={
“导入”:[“mod1\u1251”,“mod\u2412”],
“其他\u2512fos字段”:{
“名称”:“2”
}
}
是否可以将此数据结构中的每个节点映射到匿名函数
例如,一个例子是:
data={…}#以上数据
"""
map_节点将import、mod1、mod2、其他_字段、name、Jack推送到匿名字符串_fix函数中(这些是我们的节点值)。
返回后,返回被放置在适当的引用中,从而简化了在dict或对象中迭代每个节点或k/v的能力。
"""
def字符串\u修复(字符串):
返回“.join([c代表字符串中的c,如果ord(c)<128])。strip()
数据=映射节点(字符串固定,数据)
此string\u fix
函数将删除unicode并从字符串中去除空白。不要把样本数据看得太重
然后,将string\u fix
函数映射到每个节点后,数据将如下所示:
数据={
“进口”:[“mod1”、“mod2”],
“其他fos字段”:{
“名称”:“2”
}
}
这可能是我编写自己的函数的可能性,我只是想问一下,是否有一个固定的解决方案
我到处寻找:
- json映射每个文本节点
- Python递归映射字典
- 我想这回答了你的问题
#这是您的数据
数据={
“进口”:[“mod1”、“mod2”],
“其他_字段”:{
“姓名”:“杰克”
}
}
#这里有一个函数:它接受一个字符串作为参数并返回一个字符串
def剂量测定(参数):
返回参数上限()
#这里有黑魔法
def映射_节点(函数、数据):
#检查数据的类型
如果类型(数据)=dict:
ret={}
#在字典中,只需迭代并替换键和值
对于data.items()中的k,v:
nk=映射节点(func,k)
nv=映射节点(func,v)
ret[nk]=nv
elif类型(数据)==列表:
ret=[]
#在列表中,只需迭代并替换值
对于数据中的v:
v=映射节点(func,v)
ret.append(v)
elif类型(数据)==str:
ret=“”
#在字符串中,只替换值
ret=func(数据)
elif类型(数据)==int:
#在整数中,只需将其转换为字符串
ret=映射节点(func、str(数据))
#在这里,您可以添加您可能需要的所有其他类型
其他:
#如果尚未识别类型,则引发异常
引发异常(“类型”+str(类型(数据))+“尚未实现!”)
回程网
打印(数据)
数据=地图节点(doSomething,data)
打印(数据)
这将产生:
{'import': ['mod1', 'mod2'], 'other_fields': {'name': 'Jack'}}
{'IMPORT': ['MOD1', 'MOD2'], 'OTHER_FIELDS': {'NAME': 'JACK'}}
通过提供新的输入并稍加调整以允许Python解析,输出为:
{'import': ['mod1ቑ', 'mod╅'], 'other ┲fos fields': {'name': 2}}
{'import': ['mod1', 'mod'], 'other fos fields': {'name': '2'}}
看看这个,看看我的代码在起作用。你能举一个例子,说明在
data=map\u节点(str,data)
之后data
会包含什么吗?所以,如果我理解正确,你是在寻找一种算法,它可以接受所有字符串(键、值、列表元素…)并使用str函数就地处理它们?如果这就是你的意思,你能定义你想要传递的函数的原型吗?它是否应该将一个字符串参数作为输入并返回一个字符串作为输出?@Grismar我现在就这样做,我应该使用我主要解决的问题。谢谢你的提醒。“mod\u2”
:这给了我一个错误:“截断\uxxx转义”
。请修复您的代码片段好吗?这同样适用于“其他\u2fos字段”
。那么,是否要将2
转换为字符串?