我有两个列表,分别为x
和y
。将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'}]
}
答案 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'}]}