删除python中的重复记录

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)

如果你们能帮助我,我将不胜感激。

tob*_*s_k 5

使用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) 在所有这些部分中,使用另一个正则表达式来获取所有'...': '...'位;最后,使用它们重新创建字典并按上述步骤进行。(但是,使用正则表达式来解析这样的结构确实没有任何意义。)