Python-如果第一个元组键不在其他字典中,则从字典中删除项目

时间:2020-01-24 15:24:57

标签: python dictionary

我有两个字典D1D2D1包含一个键和一个值。 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}

3 个答案:

答案 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)