Har*_*inn -1 python duplicates
如何使用 Python 3 删除以下形式的重复记录?对于变量,“字符串”:
string = '{"information": [{"ID":"1111","name":"Smith","Age":"20"},
{"Age":"31","name":"Jane","ID":"2222"},
{"ID":"1111","name":"Smith","Age":"20"},
{"ID":"1111","Age":"20","name":"Smith"},
{"ID":"3333","Age":"28","name":"Sam"}]}'
Run Code Online (Sandbox Code Playgroud)
删除重复项后所需的输出:
[{"ID":"1111","name":"Smith","Age":"20"},
{"ID":"2222","Age":"31","name":"Jane"},
{"ID":"3333","Age":"28","name":"Sam"}]
Run Code Online (Sandbox Code Playgroud)
如果你们能帮助我,我将不胜感激。
使用refor this 听起来是一个可怕的想法,只有内置函数意味着使用eval来解析列表,这同样可怕。
相反,我建议使用json解析字符串,然后使用 acollections.Counter查找重复项,最后使用简单的列表理解从计数器中的(可散列的)键重新创建唯一字典。
>>> import json, collections
>>> lst = json.loads(string)["information"]
>>> c = collections.Counter(frozenset(d.items()) for d in lst)
>>> [dict(x) for x in c if c[x] == 1]
[{'ID': '2222', 'name': 'Jane', 'Age': '31'},
{'Age': '28', 'name': 'Sam', 'ID': '3333'}]
Run Code Online (Sandbox Code Playgroud)
如果你真的,真的想只使用re,你可以尝试以下方法:1,使用正则表达式search的[...]列表; b)对上一场比赛中findall的{...}组使用另一个正则表达式;(iii) 在所有这些部分中,使用另一个正则表达式来获取所有'...': '...'位;最后,使用它们重新创建字典并按上述步骤进行。(但是,使用正则表达式来解析这样的结构确实没有任何意义。)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |