从整个字典中删除一个元素

时间:2012-11-30 15:48:27

标签: python dictionary tuples

我已经在这件事上工作了几个小时,仍然无法弄清楚:O

我遇到的问题是这个。假设我有一个包含4元素元组的字典作为elemets和一个整数作为键。当从整个字典中删除一个元素(属于每个元组)使两个元组(元素)相同时,两个元组的键不会相加。而是形成一个新元素,该元素的键是前两个键之一。

假设我有一本字典:

dict={('A','B','D','C'): 4, ('C','B','A','D'):5, ('D','A','C','B'):3,('D','A','B','C'):1}

现在我想删除整本字典中的一个字母。 例如,如果我想删除'B'。以下新词典已形成,但未返回,因为其中两个元素相同。

 {('A','D','C'): 4, ('C','A','D'):5, ('D','A','C'):3,('D','A','C'):1}

而不是('D','A','C'):3,('D','A','C'):1成为('D','A','C'):4,这就是最终会发生的事情:

('D','A','C'):3以及其他元组

基本上,其中一个元组消失了。

这是我目前正在使用的方法:

for next in dict:
new_tuple=()
for i in next:
    if i!='A':
        new_tuple+=(i,)
new_dict[new_tuple]=dict[next]

上面的代码返回new_dict,如下所示:

 {('A','D','C'): 4, ('C','A','D'):5, ('D','A','C'):3}

那么我该怎么做呢,从整个字典中的每个元组中删除一个字母,如果两个元组看起来相同,它们会合并并且键加起来?

1 个答案:

答案 0 :(得分:3)

您将不得不重建整个字典,因为每个键/值对都会受到影响。当您遇到现在重叠的密钥时,可以使用defaultdict使合并更容易:

from collections import defaultdict

new_dict = defaultdict(int)
for key, value in old_dict.items():
    new_key = tuple(i for i in key if i != 'A')
    new_dict[new_key] += value

因为首次在new_key中查找new_dict时默认设置为0,我们所要做的就是添加旧值以更新new_dict因为我们第一次遇到钥匙。下次我们遇到密钥时,通过将它们相加来“合并”。