蟒蛇:基于另一个字典值从字典中删除值

时间:2020-08-05 18:56:53

标签: python python-3.x dictionary

我有两个列表,分别为xy。将x字典作为从属字典,并使用索引为0,1 ..的值列表,将y字典作为主字典,我需要从中删除值({{1}中的一个} dict`):

例如:

x

所需结果:

x = { 
        '11': { 
           0: [{'chan_id': '859',
           'brod_id': '596'}],
           
           1: [{'brod_id': '434',
           'restaurant_id': '343'},
           {'chan_id': '545',
           'brod_id': '57'}]
        }
   }
    
y = {"11": 
            [{"brod_id": "169", "chan_id": "209"},
             {'chan_id': '859', 'brod_id': '596'},
             {'chan_id': '545', 'brod_id': '57'}],
    "22": 
            [{"brod_id": "232", "chan_id": "454"},
             {'chan_id': '343', 'brod_id': '55'}]
    }

我尝试过:

filtered_data(x,y,0)  # removing only the `0` indices values of `x` dict from `y` dict
print(y)


y = {"11": 
            [{"brod_id": "169", "chan_id": "209"},
             {'chan_id': '545', 'brod_id': '57'}],
    "22": 
            [{"brod_id": "232", "chan_id": "454"},
             {'chan_id': '343', 'brod_id': '55'}]
    }

3 个答案:

答案 0 :(得分:0)

我已经为通用词典实现了它。

def filtered_data(x,y,ind):
    z={}
    keys=[j for j in x.keys() if j in y.keys()] #Common keys between two dicts
    for k in keys: #You may not need this loop in case you have only one common key
        lis=[]
        z[k]=[]
        for kx,vx in x[k].items():
            if kx==ind:
                lis+=vx
        for vy in y[k]:
            if vy not in lis:
                z[k].append(vy)
        y[k]=z[k]
    return(y)
              
        
    
y=filtered_data(x,y,0)
>>{'11': [{'brod_id': '169', 'chan_id': '209'},{'chan_id': '545', 'brod_id': '57'}],'22': [{'brod_id': '232', 'chan_id': '454'},{'chan_id': '343', 'brod_id': '55'}]}

答案 1 :(得分:0)

继续初始版本

def filtered_data(x,y, value):
    for key,d in x.items():          
                               
        for i,elem in enumerate(y[key]):

            print(i)
            print(elem) 
            print (d) # match the values and delete from y?
            if elem in d[value]:            
               del y[key][i]
    

答案 2 :(得分:0)

您也可以使用for循环检查x中y中的元素。

[y[i].remove(j) for i in y if i in x for j in y[i] if j in sum([x[i][k] for k in x[i]],[])]

输出

{'11': [{'brod_id': '169', 'chan_id': '209'}, {'chan_id': '545', 'brod_id': '57'}],
 '22': [{'brod_id': '232', 'chan_id': '454'}, {'chan_id': '343', 'brod_id': '55'}]}