gpt4 book ai didi

python - 如何使用元组的项目过滤元组列表?

转载 作者:行者123 更新时间:2023-11-28 20:58:53 25 4
gpt4 key购买 nike

我有这个列表 -

d = [('A', 'B', 1), ('C', 'D', 1), 
('B', 'D', 2), ('A', 'B', 3),
('A', 'D', 3), ('B', 'C', 4),
('A', 'C', 5), ('B', 'C', 8)]

元组中的前两项是节点,第三项是权重。我想删除具有相同的第 1 和第 2 个节点(两个元组之间的第 1 和第 2 个节点相同)但权重更高的元组。

最终名单:

d = [('A', 'B', 1), ('C', 'D', 1), 
('B', 'D', 2), ('A', 'D', 3),
('B', 'C', 4), ('A', 'C', 5)]

我试过类似的方法,但看起来不是一个非常干净的解决方案。

edge_dict = {}

for x in d:
key = '%s%s' % (x[0], x[1])
if not edge_dict.get(key):
edge_dict[key] = x[2]
else:
if edge_dict[key] > x[2]:
edge_dict[key] = x[2]

final_list = []
for k, v in edge_dict.items():
t = list(k)
t.append(v)
final_list.append(tuple(t))


final_list.sort(key=lambda x: x[2])
print final_list

最佳答案

另一种方法可能是首先对每个元组的前两个元素和最后一个元素的降序排序元组列表:

sorted_res = sorted(d, key = lambda x:((x[0], x[1]), x[2]),reverse=True)
print(sorted_res)

结果:

[('C', 'D', 1),
('B', 'D', 2),
('B', 'C', 8),
('B', 'C', 4),
('A', 'D', 3),
('A', 'C', 5),
('A', 'B', 3),
('A', 'B', 1)]

现在用前两个元素的键创建字典,值将是最新的一个小的:

my_dict = {(i[0], i[1]):i for i in sorted_res}
print(my_dict)

结果:

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

最终结果是字典的值:

list(my_dict.values())

结果:

[('A', 'C', 5),
('A', 'B', 1),
('A', 'D', 3),
('B', 'D', 2),
('C', 'D', 1),
('B', 'C', 4)]

以上步骤可以通过结合sorteddictionary comprehension来完成:

result = list({(i[0], i[1]):i 
for i in sorted(d, key = lambda x:((x[0], x[1]), x[2]),reverse=True)}.values())

关于python - 如何使用元组的项目过滤元组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50920045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com