如何将我的工作词典排序程序转换为 Python 3.5

How do I convert my working dictionary sorting program to Python 3.5

我是 Python 的新手(刚上 4 周),我的 python 程序对我的字典进行排序时遇到了问题。我的字典中有 ID,其中一些相互连接(通过集合)。在这个例子中,我应该得到一个由两个数组 [[1,3,4,7,8,9],[2,5,6,50,70,80]] 组成的数组来标记我的两个不同的组。 该程序适用于较旧的 python 版本,但现在我在将其转换为 Python 3.5 时遇到问题,因为这些集合的工作方式不同,我似乎无法获得它 运行。我需要更改什么才能使其在 Python 3.5 上运行? (我使用的是WinPython 3.5,Spyder环境)

from sets import Set
dict = {1:Set([3,4]), 2:Set([5,6]), 3:Set([1,4,7,8]), 4:Set([1,3,8,9]), 5:Set([2,6,50,80]), 6:Set([2,5,70,80]), 7:Set([3,8]), 8:Set([3,4,7,9]), 9:Set([4,8]), 50:Set([5,80]), 70:Set([6,80]), 80:Set([5,6,50,70])}

def recursion(number):
    if number not in tmp_array:
        tmp_array.append(number)
        if number in dict:
            tmp = dict[number]
            del dict[number]
            for i in tmp:
                recursion(i)

def startRecursion(number):
    global tmp_array
    tmp_array = []
    recursion(number)
    return tmp_array

def getResults():
    results = []
    tmp_array = []
    while dict:
        results.append(startRecursion(dict.keys()[0]))
    return results

print (getResults())

Python 在 2.4 版中用 a built-in set type 替换了 sets 模块。要切换到新类型,只需删除 from sets import Set 行并将每次出现的 Set 更改为 set。还要注意 set([3,4]) 现在可以等效地写成 {3,4}.

这是您的代码版本,应该适用于 Python 2 和 Python 3 的最新版本。

我已经消除了 global tmp_array 列表与 temp_result 集的使用,该集作为参数传递给递归函数。测试集合的成员资格比测试列表更有效。速度差异对于小集几乎不明显,但对于大集非常明显。

my_dict = {
    1: set([3, 4]),
    2: set([5, 6]),
    3: set([1, 4, 7, 8]),
    4: set([1, 3, 8, 9]),
    5: set([2, 6, 50, 80]),
    6: set([2, 5, 70, 80]),
    7: set([3, 8]),
    8: set([3, 4, 7, 9]),
    9: set([4, 8]),
    50: set([5, 80]),
    70: set([6, 80]),
    80: set([5, 6, 50, 70]),
}

def recursion(number, temp_result):
    if number not in temp_result:
        temp_result.add(number)
        tmp = my_dict[number]
        del my_dict[number]
        for i in tmp:
            recursion(i, temp_result)

def startRecursion(number):
    temp_result = set()
    recursion(number, temp_result)
    return list(temp_result)

def getResults():
    results = []
    while my_dict:
        first_key = list(my_dict.keys())[0]
        results.append(startRecursion(first_key))
    return results

print(getResults())

输出

[[1, 3, 4, 7, 8, 9], [2, 5, 6, 80, 50, 70]]