python: удалить значения из dict на основе других значений dict - PullRequest
0 голосов
/ 05 августа 2020

У меня есть два dict списков, x и y. С x dict, являющимся подчиненным dict, имеющим список значений с индексами 0,1 .. и y dict, являющимся главным dict, из которого мне нужно удалить значения (один в x dict`):

Например:

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'}]
    }

Я пробовал:

def filtered_data(x,y, val):
    for key,val in x.items():
        for k,v in val.items():
            for i,elem in enumerate(v):
                print(i)
                print(elem)  # match the values and delete from y?
            
        
filtered_data(x,y,0)

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Продолжить исходную версию

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]
    
0 голосов
/ 05 августа 2020

Я реализовал это для универсального c словаря.

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'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...