如何将工作字典排序程序转换为Python3.5

2024-09-27 21:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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())

Tags: in程序numberreturnifdef数组array
2条回答

在版本2.4中,Python用a built-in ^{} type替换了sets模块。要切换到新类型,只需去掉from sets import Set行,并将每个出现的Set更改为set。还要注意,set([3,4])现在可以等价地写{3,4}。你知道吗

下面是一个可以在最新版本的python2和python3上使用的代码版本。你知道吗

我已经消除了使用带有temp_result集的globaltmp_array列表,该集合作为参数传递给递归函数。测试集合的成员资格比测试列表更有效。速度差对于小的组几乎不明显,但是对于大的组相当明显。你知道吗

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]]

相关问题 更多 >

    热门问题