如何将我的工作词典排序程序转换为 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]]
我是 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]]