python - 如何过滤带有元组项的元组列表?
问题描述
我有这个清单 -
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)]
这里元组中的前两项是节点,第三项是权重。我想删除具有相同第一个和第二个节点(两个元组之间的第一个和第二个节点相同)但权重更高的元组。
最终名单:
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
解决方案
只是一点重构。
edge_dict = {}
for t in d:
key = t[:2]
value = t[-1]
if key in edge_dict:
edge_dict[key] = min(value, edge_dict[key])
else:
edge_dict[key] = value
final_list = [(q,r,t) for (q,r),t in edge_dict.items()]
final_list.sort(key=lambda x: x[2])
推荐阅读
- regex - 如何在 Lucee 中模仿 Unicode JS 正则表达式
- html - Outlook 未在签名中呈现我的 CSS
- android - NativeScript 和方向键导航
- html - 角度 div scrollTop 属性未设置
- javascript - 在 d3 中难以将 json 字符串转换为日期格式
- c# - 合并数组(带偏移的叠加)
- java - JAVA,SWT我在封闭范围内定义的局部变量必须是最终的或有效的最终
- sql - 如何计算分组的四分位数?
- android - Android kotlin - 上传带有 Volley 错误的图像:意外覆盖:以下声明具有相同的 JVM 签名
- amazon-web-services - API Gateway 在生产环境中偶尔会出现 5XX 错误