Python RuntimeError: maximum recursion depth exceeded in cmp
我试图处理一个复杂的数据结构。
数据结构说明:我有一本类字典。密钥是一个名称。该值是类引用。该类包含两个字典列表。
下面是我的数据结构的一个简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import scipy.stats class employee_salaries(object): def __init__(self,management, players, disparity): self.management = management self.players = players self.disparity = disparity # the coach's salary was 12 his 1st year and 11 his 2nd year mgmt1 = [{'Coach':12, 'Owner':15, 'Team Manager': 13}, {'Coach':11, 'Owner':14, 'Team Manager':15}] plyrs1 = [{'Point Guard': 14, 'Power Forward':16,},{'Point Guard':16, 'Power Forward':18}] NBA = {} mgmt2 = [{'Coach':10, 'Owner':12}, {'Coach':13,'Owner':15}] plyrs2 = [{'Point Guard':17, 'Power Forward':14}, {'Point Guard': 22, 'Power Forward':16}] NBA['cavs'] = employee_salaries(mgmt1,plyrs1,0) NBA['celtics'] = employee_salaries(mgmt2,plyrs2,0) |
比如说,我想确定这两年控球后卫的工资和老板的工资之间的差距。
1 2 3 4 5 6 7 8 9 10 | for key, value in NBA.iteritems(): x1=[]; x2=[] num = len(NBA[key].players) for i in range(0,num): x1.append(NBA[key].players[i]['Point Guard']) x2.append(NBA[key].management[i]['Owner']) tau, p_value = scipy.stats.kendalltau(x1, x2) NBA[key].disparity = tau print NBA['cavs'].disparity |
记住这不是我的真实数据。在我的实际数据结构中,有150多个键。字典列表中还有更多的元素。当我在真实数据上运行上面的代码时,会得到一个运行时错误。
RuntimeError: maximum recursion depth exceeded in cmp error.
如何更改上面的代码,使它不会给我一个最大的递归深度错误?我想进行这种类型的比较,并能够保存该值。
这是一个错误。
固定在0.15
您传入的是空数组,函数处理错误。或者更新scipy,或者在数组为空的情况下跳过(不过,请检查您的数据是否正确,以及在其中使用空数组是否有意义)。
为您的代码提供一些建议。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | for team in NBA.itervalues(): #Or `for name, team in NBA.iteritems()` if you use the name. x1, x2 = [], [] # Not `x1 = x2 = []`, since that would be two names for one list for player, manager in izip(team.players, team.management): x1.append(player['Point Guard']) x2.append(manager['Owner']) # Or lose the `for` loop and say: # `x1 = [player['Point Guard'] for player in team.players]` # `x2 = [manager['Owner'] for manager in team.management]` # (This can be more efficient.) tau, p_value = scipy.stats.kendalltau(x1, x2) team.disparity = tau print NBA['cavs'].disparity |