首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从由元组组成的字典中删除元素,计算元组中的最后一个元素和字典中的值。

从由元组组成的字典中删除元素,计算元组中的最后一个元素和字典中的值。
EN

Stack Overflow用户
提问于 2020-11-12 21:50:38
回答 3查看 44关注 0票数 0

给出了以下字典:

代码语言:javascript
复制
a = {('a','b', 'c'):3,('a','d','c'):4, ('f','e','b'):5, ('r','t','b'):5.1}

字典由图元作为键和数字作为值组成。每个元组由一系列字母组成。从最后一个元素相同的所有元组中,应该排除字典值最低的元组。例如,tuple ('a','b', 'c')和tuple ('a','d','c')都将字母C作为最后一个元素,因此应该删除值最低的元素。参照上述字典,结果应该是:

代码语言:javascript
复制
{('a','d','c'):4, ('r','t','b'):5.1}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-12 21:56:14

你可以这样做:

代码语言:javascript
复制
from collections import defaultdict
from operator import itemgetter

a = {('a','b', 'c'):3,('a','d','c'):4, ('f','e','b'):5, ('r','t','b'):5.1}

# group the items by the last element of the key of the tuple
lookup = defaultdict(list)
for key, value in a.items():
    lookup[key[2]].append((key, value))

# find the maximum in each group by the value of the tuple
result = dict(max(value, key=itemgetter(1)) for value in lookup.values())

print(result)

输出

代码语言:javascript
复制
{('a', 'd', 'c'): 4, ('r', 't', 'b'): 5.1}
票数 1
EN

Stack Overflow用户

发布于 2020-11-12 22:24:56

代码:

代码语言:javascript
复制
a = {('a','b', 'c'):3,('a','d','c'):4, ('f','e','b'):5, ('r','t','b'):5.1}

keys_to_remove = []
for key in a.keys():
    srch_key = key[-1]
    lowest_val = min(v for k,v in a.items() if k[-1] == srch_key)
    keys_to_remove.append(*(k for k,v in a.items() if k[-1] == srch_key and v == lowest_val))
    
for key_to_remove in set(keys_to_remove):
    a.pop(key_to_remove)
print(a)

输出:

代码语言:javascript
复制
{('a', 'd', 'c'): 4, ('r', 't', 'b'): 5.1}
票数 0
EN

Stack Overflow用户

发布于 2020-11-12 22:33:48

另一种解决办法可能是:

代码语言:javascript
复制
a_dict = {('a','b', 'c'):3,('a','d','c'):4, ('f','e','b'):5, ('r','t','b'):5.1}


b_dict = dict()
seq = 2
for key in a_dict:
    b_key = find_key(b_dict, key[seq])
    if b_key is not None:
        b_dict.pop(b_key)
        b_dict[key] = a_dict[key]
    else:
        b_dict[key] = a_dict[key]


def find_key(x_dict, k, seq=2):
    for key in x_dict:
        if key[seq] == k:
            return key
    return None

创建一个空字典。在dict上迭代,在新dict中搜索关键元组的最后一个元素。如果不存在,将键:value添加到新的dict中。如果发现任何值,请检查其值是否更大。如果不是,请删除元素并添加新键:value。

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

https://stackoverflow.com/questions/64812294

复制
相关文章

相似问题

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