我有两个字典D1
,D2
。 D1
包含一个键和一个值。 D2
包含一个元组作为键,后跟一个值。
D1 = {'x':123, 'x1': 154, 'x2':184}
D2 = {('x','x1'):50, ('x1','x2'):30, ('y','x2'):10}
如果元组键的第一部分不是D2
中的键,是否可以从D1
中删除项目?因此,在此示例中,应该从字典中删除D2
中以“ y”作为第一个元组键值的项目。这样D2
就会看起来像这样。
D2 = {('x','x1'):50, ('x1','x2'):30}
答案 0 :(得分:1)
您可以尝试遍历D2.items():
D1 = {'x':123, 'x1': 154, 'x2':184}
D2 = {('x','x1'):50, ('x1','x2'):30, ('y','x2'):10}
new_dict = {i:j for i,j in D2.items() if i[0] in D1}
print(new_dict)
输出
{('x', 'x1'): 50, ('x1', 'x2'): 30}
答案 1 :(得分:1)
使用D2
制作.copy()
的副本,并对其进行迭代,以避免变异原始字典并在进行RuntimeError
时获取.pop()
D1 = {'x':123, 'x1': 154, 'x2':184}
D2 = {('x','x1'):50, ('x1','x2'):30, ('y','x2'):10}
for i in D2.copy():
if i[0] not in D1.keys():
D2.pop(i)
D2变为:
{('x','x1'):50,('x1','x2'):30}
答案 2 :(得分:0)
执行此操作的简单函数
D1 = {'x':123, 'x1': 154, 'x2':184}
D2 = {('x','x1'):50, ('x1','x2'):30, ('y','x2'):10}
def remove_keys(d1, d2):
keys_list = d1.keys()
keys_to_remove = []
for k1, k2 in d2.keys():
if k1 not in keys_list:
keys_to_remove.append((k1, k2))
for key in keys_to_remove:
del d2[key]
return d2
D2 = remove_keys(D1, D2)