在不同的Json Lists python中删除重复的值

我知道关于重复项有很多问题,但是找不到适合我的解决方案。

我有一个像这样的json结构:

    {
    "test": [
        {
            "name2": [
                "Tik","eev","asdv","asdfa","sadf","Nick"
            ]
        },{
            "name2": [
                "Tik","123","r45","676","121"
            ]
        }
    ]
}

我想保留第一个值,并删除所有其他重复项。

预期结果

    {
    "test": [
        {
            "name2": [
                "Tik",{
            "name2": [
                "123","121"
            ]
        }
    ]
  }

我尝试使用tmp检查重复项,但似乎不起作用。另外,我也找不到重新将其设为json的方法。

import json
with open('myjson') as access_json:
    read_data = json.load(access_json)

tmp = []
tmp2 = []
def get_synonyms():
    ingredients_access = read_data['test']
    for x in ingredients_access:
        for j in x['name2']:
            tmp.append(j)
            if j in tmp:
                tmp2.append(j)




get_synonyms()
print(len(tmp))
print(len(tmp2))
cuijuncyanway 回答:在不同的Json Lists python中删除重复的值

您可以使用递归:

def filter_d(d):
  seen = set()
  def inner(_d):
     if isinstance(_d,dict):
        return {a:inner(b) if isinstance(b,(dict,list)) else b for a,b in _d.items()}
     _r = []
     for i in _d:
       if isinstance(i,list)):
          _r.append(inner(i))
       elif i not in seen:
          _r.append(i)
          seen.add(i)
     return _r
  return inner(d)

import json
print(json.dumps(filter_d(data),indent=4))

输出:

{
  "test": [
    {
        "name2": [
            "Tik","eev","asdv","asdfa","sadf","Nick"
        ]
    },{
        "name2": [
            "123","r45","676","121"
        ]
     }
  ]
}
,

您首先要将所有内容添加到tmp,然后再添加到tmp2,因为之前每个值都已添加到tmp

为了您的特定测试示例,我对该功能做了一些改动:

def get_synonyms():
    test_list = []
    ingredients_access = read_data['test']
    used_values =[]
    for x in ingredients_access:
        inner_tmp = []
        for j in x['name2']:
            if j not in used_values:
                inner_tmp.append(j)
                used_values.append(j)
        test_list.append({'name2':inner_tmp})
    return {'test': test_list}


result = get_synonyms()
print(result)

输出:

{'test': [{'name2': ['Tik','eev','asdv','asdfa','sadf','Nick']},{'name2': ['123','r45','676','121']}]}

,

这是一个有点怪异的答案:

d = {'test': [{'name2': ['Tik',{'name2': ['Tik','123','121']}]}
s = set()
for l in d['test']:
    l['name2'] = [(v,s.add(v))[0] for v in l['name2'] if v not in s]

输出:

{'test': [{'name2': ['Tik','121']}]}

这使用set来跟踪唯一值,并将唯一值添加到set,同时将值返回列表。

本文链接:https://www.f2er.com/3159153.html

大家都在问