python:基于另一个dict值从dict中删除值

2024-06-01 02:08:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个目录列表,xy。当xdict是从dict,它有一个带有索引的值列表0,1 ..,而ydict是主dict,我需要从中删除值(在xdict`):

例如:

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)

Tags: theinfromid列表fordataval
2条回答

您只需检查y中的元素在x中是否也使用for循环

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

继续初始版本

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]
    

相关问题 更多 >