我一直在尝试从 python 字典中的多个值中删除特定项目,但不完全确定如何执行此操作。例如,在字典中:
d = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}
我将如何删除“嗨”,以便剩下的就是:
d = {('hello', 'how are you'): 2, ('hello', 'how are you'): 1}
我一直在尝试从 python 字典中的多个值中删除特定项目,但不完全确定如何执行此操作。例如,在字典中:
d = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}
我将如何删除“嗨”,以便剩下的就是:
d = {('hello', 'how are you'): 2, ('hello', 'how are you'): 1}
您显然想更改密钥。因此,您只需要使用新键存储相应的值并删除旧键。但是,在您的情况下,创建一个新的 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 不能包含相同的键两次。
您不会在此处获得预期的输出,因为两个键现在相同。因此,在结果字典中只能找到其中一个。
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}
这应该这样做
answer = {}
for k,v in d.iteritems():
key = tuple(i for i in k if i!='hi')
answer[key] = v
d = answer
不确定这是否适合您,但这会创建一个新字典,并将汇总在删除后最终发生冲突的任何键的值'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})
这与您的输出不对应,但正如其他人所解释的那样,字典只能有一个特定值的键,因此它合并为一个。