我一直在尝试从python中的字典中的多个值中删除特定项,但我不完全确定如何执行此操作。例如,在字典中:
d = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}
我如何删除'hi'以便剩下的就是:
d = {('hello', 'how are you'): 2, ('hello', 'how are you'): 1}
答案 0 :(得分:3)
您显然想要更改密钥。因此,您只需要使用新密钥存储相应的值并删除旧密钥。但是,在您的情况下,创建新的dict更容易,因为您要修改每个项目。
d2 = {}
for key, value in d.iteritems():
key = list(key)
if 'hi' in key:
key.remove('hi')
d2[tuple(key)] = value
d2
现在包含{('hello', 'how are you'): 1}
正如您所看到的,它只包含一个值,与您的示例不同,因为dicts不能包含两次相同的密钥。
答案 1 :(得分:2)
这里不会得到预期的输出,因为两个键现在都相同。因此,在最终的词典中只能找到其中一个。
In [142]: d = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}
In [143]: {tuple(y for y in x if y!='hi'):d[x] for x in d}
Out[143]: {('hello', 'how are you'): 1}
答案 2 :(得分:1)
这应该这样做
answer = {}
for k,v in d.iteritems():
key = tuple(i for i in k if i!='hi')
answer[key] = v
d = answer
答案 3 :(得分:1)
不确定这是否适合您,但这会创建一个新字典,并将在删除'hi'
后最终发生碰撞的任何键的值相加(假设这是您想要做的 - 如果不是,请忽略不计这个答案:)):
>>> from collections import defaultdict
>>> new_d = defaultdict(int)
>>> for k, v in d.iteritems():
... new_d[tuple(i for i in k if i != 'hi')] += v
...
>>> new_d
defaultdict(<type 'int'>, {('hello', 'how are you'): 3})
这与您的输出不符,但正如其他人所解释的那样,词典只能有一个特定值的键,因此它合并为一个。