如何使用python difflib将json对象与多个字段进行比较
理想的结果是JSON对象看起来与下面的示例类似。从那里,difflib将处理DataToCompare name和address到DataSetAgainst name和address,并给出与JSON out示例类似的差异 JSON格式:如何使用python difflib将json对象与多个字段进行比较,python,python-3.x,difflib,Python,Python 3.x,Difflib,理想的结果是JSON对象看起来与下面的示例类似。从那里,difflib将处理DataToCompare name和address到DataSetAgainst name和address,并给出与JSON out示例类似的差异 JSON格式: { "DataToCompare": [ { "name": "Alex Young", "address": "123 Main Street" } ], "DataSetAgainst": [
{
"DataToCompare": [
{
"name": "Alex Young",
"address": "123 Main Street"
}
],
"DataSetAgainst": [
{
"name": "Bob Doll",
"address": "555 South Street"
},
{
"name": "Bob Young",
"adress": "123 Main St."
}
]
}
JSON输出:
[
{
"name": "Bob Doll",
"Name Match": 11.8,
"address": "555 South Street",
"address match": <some number>
},
{
"name": "Bob Young",
"Name Match": 55.6,
"address": "123 Main St.",
"address match": <some number>
}
]
Basic将您的差异部分放入函数中,例如diff(key):
和do用于输入['name','address']:;差异=差异(键)
。顺便说一句:你在比较123大街、555南街,第二个是用清理的。isalnum()
第一个不是!
data_to_compare = dataIncoming["DataToCompare"][0]
mt_name = data_to_compare['name']
dataList = []
for i in dataIncoming["DataSetAgainst"]:
dataList.append(i["name"])
dataResults = []
for i in dataList:
dataBack = {}
clean_name = ''.join(e for e in i if e.isalnum())
sequence = difflib.SequenceMatcher(isjunk=None, a=mt_name, b=clean_name)
difference = sequence.ratio()*100
difference = round(difference, 1)
dataBack["name"] = i
dataBack["Name Match"] = difference
dataResults.append(dataBack)
return json.dumps(dataResults)