You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何筛选排序字典中值列表无交集的键并顺序添加

需求说明

现有字典结构:

  • 字典的键代表「节点」
  • 键对应的值为该节点所属社区的成员列表
    需要实现以下处理逻辑:
  1. 将字典按照值列表的长度做**非递增(降序)**排序
  2. 从排序后排名首位的键开始遍历全部键
  3. 依次将值列表与所有已加入结果的键的值列表完全无交集的键,加入最终结果列表

给定测试数据

示例输入字典如下:

node_community = {
    '2179': [15, 197, 363, 594, 766, 865, 1150, 1417, 1575, 1615, 1617, 1618, 1621, 1623, 1624, 1625, 1627],
    '2188': [15, 363, 766, 1150, 1417, 1616, 1617, 1618, 1619, 1620, 1622, 1624, 1625, 1626, 1629],
    '2180': [197, 594, 1150, 1575, 1616, 1617, 1618, 1619, 1620, 1622, 1624, 1625, 1626, 1629, 2201],
    '2195': [1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629],
    '2452': [1757, 1758, 1759, 1760, 1761, 1762, 1763, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772],
    '238': [57, 65, 76, 213, 251, 1080, 1126, 1448, 1896, 1897, 1898, 1899, 1900],
    '6974': [14, 122, 137, 491, 641, 660, 675, 1046, 1800, 2054, 2371],
    '124': [19, 66, 70, 113, 123, 159, 276, 297, 826, 2122],
    '3224': [18, 36, 44, 215, 230, 419, 1139, 1259, 2153],
    '100': [19, 66, 113, 297, 635, 826, 1356, 2122],
    '553': [40, 50, 133, 135, 192, 526, 1677, 1829]
}

原有代码问题

原有代码存在以下错误,无法得到预期结果:

  • 缺失核心排序步骤:没有先按值列表长度对字典做降序排序,直接取原字典首位键不符合需求
  • 变量未初始化:seedCount、count两个变量没有赋值就直接使用,运行会直接报错
  • 判断逻辑错误:需求要求「和已选节点的社区列表完全无交集才加入」,原代码以差集不为空作为判断条件,实际是只要存在不同元素就加入,和需求逻辑完全相反
  • 集合存储逻辑错误:seedSet = set(seed)会把字符串类型的节点键拆分为单个字符的集合,例如键'2179'会被拆为{'2','1','7','9'},无法正确存储完整节点标识
  • 存在冗余与拼写错误:开头定义了拼写错误的CummunitySet后续未使用,循环结束后多余的Index=Index+1无实际作用

正确实现代码
# 1. 按社区列表长度降序排序所有节点
sorted_nodes = sorted(node_community.items(), key=lambda item: len(item[1]), reverse=True)

result_nodes = []  # 存储符合条件的节点
covered_community = set()  # 存储已经被覆盖的所有社区成员

for node, comm_list in sorted_nodes:
    current_comm = set(comm_list)
    # 2. 判断当前节点社区和已覆盖社区无交集
    if current_comm.isdisjoint(covered_community):
        result_nodes.append(node)
        # 将当前节点的社区成员加入已覆盖集合
        covered_community.update(current_comm)

print(result_nodes)

针对示例数据运行上述代码,输出结果为:

['2179', '2452', '238', '6974', '124', '3224', '553']

内容的提问来源于stack exchange,提问作者Bisma Dar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:39:26