如果元素多次是键的值,则从列表中删除该元素

wgeznvg7  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(404)

所以,这个问题很难浓缩成标题,但这里有一个详细的解释。
我有一个大字典,它有数千个键值对,可以有下面的例子:

dict = {'apple' : ['mint', 'nutmeg', 'cinnamon'], 'mint' : ['apple', 'orange', 'banana']}

注意“apple”是一个键,它的值是list,list包含“mint”元素。
在我的大字典里,“薄荷”也可能是一个键,它可能有一个含有“苹果”元素的水果列表。因为它是字典第二个元素的键。
问题是我想保留这对苹果和薄荷,不管哪一个是关键,但我想要一个精致的字典,它们不会形成重复。
因此所需的字典是:

dict_2 = {'apple' : ['mint', 'nutmeg', 'cinnamon'], 'mint' : ['orange', 'banana']}

如果“mint”列表中的“apple”元素被删除,

dict_2 = {'apple' : ['nutmeg', 'cinnamon'], 'mint' : ['apple', 'orange', 'banana']}

“苹果”列表中的“薄荷”元素已被删除。
编辑:我找到了这个问题的解决办法。你可以在下面找到它

osh3o9ms

osh3o9ms1#

mydict = {'apple' : ['mint', 'nutmeg', 'cinnamon'], 'mint' : ['apple', 'orange', 'banana']}

因为这看起来像是家庭作业,你还没有展示任何工作或问一个特定的问题,我会给你一些算法的提示,但编写代码是由你决定的。
你想吗
迭代每个 key, value 在字典里
例如 key = "apple"; value = ['mint', 'nutmeg', 'cinnamon'] 迭代每个元素 v 值(&V):
如果 mydict 包含密钥 v ,
检查列表是否在 mydict[v] 包含 key .
如果没有,则添加元素 vnew_list 如果有,跳过添加 vmydict[key] 到新创建的 new_list 将其转换为代码非常简单,您甚至可以将其作为一个很酷的双行程序来编写。如果你遇到问题,有具体的问题,尽管问吧!
在上运行此算法的代码之后 mydict ,我得到:

{'apple': ['nutmeg', 'cinnamon'], 'mint': ['apple', 'orange', 'banana']}
u2nhd7ah

u2nhd7ah2#

下面的代码解决了这个问题。如果有人想通过做一个花哨的单行线来炫耀自己,请随意:)

for key, value in my_dict.items(): # iterate over each key, value
        for v in value:
            if v in my_dict.keys() and key in my_dict[v]:
                my_dict[v].remove(key)
            else:
                continue

相关问题