繁体   English   中英

python:根据另一个 dict 值从 dict 中删除值

[英]python: remove values from dict based on another dict values

我有两个列表, xy 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)

继续初始版本

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]
    

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

[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]],[])]

Output

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM