首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从整个字典中删除一个元素

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

Stack Overflow用户
提问于 2012-11-30 23:48:27
回答 1查看 77关注 0票数 0

我已经研究这个东西好几个小时了,还是想不通。

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

假设我有一本字典:

代码语言:javascript
复制
dict={('A','B','D','C'): 4, ('C','B','A','D'):5, ('D','A','C','B'):3,('D','A','B','C'):1}

现在我想从整个字典中删除一个字母。例如,如果我想删除'B‘。下面的新字典已形成,但不会返回,因为其中两个元素是相同的。

代码语言:javascript
复制
 {('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和其他元组

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

这是我目前使用的方法:

代码语言:javascript
复制
for next in dict:
new_tuple=()
for i in next:
    if i!='A':
        new_tuple+=(i,)
new_dict[new_tuple]=dict[next]

上面的代码按如下方式返回new_dict:

代码语言:javascript
复制
 {('A','D','C'): 4, ('C','A','D'):5, ('D','A','C'):3}

那么我能做些什么,从整个字典中的每个元组中删除一个字母,如果其中两个元组看起来相同,它们将合并并将键相加?

EN

回答 1

Stack Overflow用户

发布于 2012-11-30 23:53:31

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

代码语言:javascript
复制
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_dict中查找new_key时,默认情况下它将被设置为0,所以我们所要做的就是添加旧值,以便在第一次遇到键时更新new_dict。下一次我们遇到键时,通过将它们相加来“合并”这些值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13648489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档