如果两个元组元素都不在其他字典键中,则删除元组键字典项

2024-05-19 16:10:13 发布

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

我有一本以元组为键的字典。
和第二个具有单元素键的字典。
价值观并不重要

dictionary_1 = {("Apple","Banana") : 3,
                 ("Cat","Dog") : 5,
                 ("Spain", "Italy") : 10,
                 ("Chair","Sofa"): 23}

dictionary_2 = {"Denmark" : 4,
                "Apple" : 9,
                "Fish" : 7,
                "Sofa" : 8 }

如果键的任一元素是字典\u 2中的键之一,我想从字典\u 1中删除键

因此,解决办法是:

#Some code
print(dictionary_1)
#The remaining key value pairs would be:
{("Cat","Dog") : 5,
 ("Spain", "Italy") : 10}

谢谢


Tags: 元素appledictionary字典catbanana元组dog
3条回答

使用dictionary comprehensionsets可以很快解决这个问题:

>>> dictionary_1 = {fruits: n 
                    for fruits, n in dictionary_1.items()
                    if set(fruits).isdisjoint(dictionary_2)}
{('Cat', 'Dog'): 5, ('Spain', 'Italy'): 10}

上面说:

  • dictionary_1重新分配到一个新的映射到数字的水果元组字典
  • 从原始字典的项中获取键/值对
  • 仅包括该对,因为水果元组和第二个字典的键之间没有重叠

希望这有帮助:-)

您可以使用for key in dict语法来迭代字典的键:

dictionary_1 = {("Apple","Banana") : 3,
                 ("Cat","Dog") : 5,
                 ("Spain", "Italy") : 10,
                 ("Chair","Sofa"): 23}

dictionary_2 = {"Denmark" : 4,
                "Apple" : 9,
                "Fish" : 7,
                "Sofa" : 8 }

new_dict = {}
for i in dictionary_1:
    if i[0] not in dictionary_2 and i[1] not in dictionary_2:
        new_dict[i] = dictionary_1[i]

print(new_dict) # {('Spain', 'Italy'): 10, ('Cat', 'Dog'): 5}

您可以制作一个新的字典,其中包含dict理解,并利用some()进行测试:

dictionary_1 = {("Apple","Banana") : 3,
                 ("Cat","Dog") : 5,
                 ("Spain", "Italy") : 10,
                 ("Chair","Sofa"): 23}

dictionary_2 = {"Denmark" : 4,
                "Apple" : 9,
                "Fish" : 7,
                "Sofa" : 8 }

{k:v for k,v in dictionary_1.items() 
 if not any(t in dictionary_2 for t in k)}
# {('Cat', 'Dog'): 5, ('Spain', 'Italy'): 10}

相关问题 更多 >