说我有一个包含任意数量值的字典。 然后我创建一个列表。 如果在字典中找到列表的任何值,无论它是键还是索引,如何删除完整值?
E.g:
dictionary = {1:3,4:5}
list = [1]
...
dictionary = {4:5}
如何在不创建新词典的情况下执行此操作?
答案 0 :(得分:6)
for key, value in list(dic.items()):
if key in lst or value in lst:
del dic[key]
无需创建单独的列表或字典。
我解释“它是否是一个键或一个索引”来表示“它是否是一个键或一个值[在字典中]”
答案 1 :(得分:4)
>>> dic = {1: 3, 4: 5}
>>> ls = set([1])
>>> dels = []
>>> for k, v in dic.items():
if k in ls or v in ls:
dels.append(k)
>>> for i in dels:
del dic[i]
>>> dic
{4: 5}
答案 2 :(得分:1)
dictionary = {1:3,4:5}
list = [1]
for key in list:
if key in dictionary:
del dictionary[key]
答案 3 :(得分:1)
>>> dictionary = {1:3,4:5}
>>> list = [1]
>>> for x in list:
... if x in dictionary:
... del(dictionary[x])
...
>>> dictionary
{4: 5}
答案 4 :(得分:1)
执行此操作的一个班轮将是:
[dictionary.pop(x) for x in list if x in dictionary.keys()]
答案 5 :(得分:0)
我会做类似的事情:
for i in list:
if dictionary.has_key(i):
del dictionary[i]
但我相信还有更好的方法。
答案 6 :(得分:0)
更多测试用例来定义我如何解释您的问题:
#!/usr/bin/env python
def test(beforedic,afterdic,removelist):
d = beforedic
l = removelist
for i in l:
for (k,v) in list(d.items()):
if k == i or v == i:
del d[k]
assert d == afterdic,"d is "+str(d)
test({1:3,4:5},{4:5},[1])
test({1:3,4:5},{4:5},[3])
test({1:3,4:5},{1:3,4:5},[9])
test({1:3,4:5},{4:5},[1,3])
答案 7 :(得分:0)
如果字典足够小,那么创建一个新字典会更容易。从字典s
中删除其密钥位于集d
中的所有项目:
d = dict((k, v) for (k, v) in d.items() if not k in s)
从字典s
中删除其键或值位于集d
中的所有项目:
d = dict((k, v) for (k, v) in d.items() if not k in s and not v in s)
答案 8 :(得分:0)
def remKeys(dictionary, list):
for i in list:
if i in dictionary.keys():
dictionary.pop(i)
return dictionary