我对如何解决这个问题有一个想法,但我需要用大量的数据来优化它。 我非常希望找到每个状态中的所有值,并保留它们出现次数的计数器
courses = {}
def insertIntoDataStruct(state,job,count,dict):
if not state in dict: #adds state to list with first job and count
dict[state] = [[job,count]]
else:
dict[state].append([job,count])
insertIntoDataStruct("TX", 214, 1, courses)
insertIntoDataStruct("CA", 3124, 1, courses)
insertIntoDataStruct("TX", 21455, 1, courses)
insertIntoDataStruct("CA", 5124, 1, courses)
insertIntoDataStruct("CA", 5124, 1, courses)
应输出:
{'CA': [[3124, 1], [5124, 1], [5124, 1]], 'TX': [[214, 1], [21455, 1]]}
因此,如果在CA中值5124被加了两次,它应该输出:
{'CA': [[3124, 1], [5124, 2], 'TX': [[214, 1], [21455, 1]]}
如果数字已经在状态中,我可以做一个for循环来检查每次追加的内容,但是当我在添加每一行时得到数千个要检查的值时,它的时间会很长
优化的最佳方法是什么
我会把它构造成^{} 个^{} 对象。这两个字典子类将组成查找状态和作业
O(1)
,这意味着您不必手动检查struct
或struct[state]
中的键—您只需添加count
,就好像它已经存在一样注意,为了符合PEP-0008,我已经重命名了函数
要获得每个州的顶级课程,请使用
Counter.most_common
:要对普通词典(
courses = {}
)执行相同的操作:不过,你现在必须自己找到前三名
相关问题 更多 >
编程相关推荐