基本上,我有一堆numpy数组,每个数组都有一个更大数组的网站列表。我希望,在用户输入的情况下,基本上返回数组,其中用户的输入是数组的第一个元素。它将返回,用户将输入另一个网站,它将是第一次匹配的数组的第二个元素。例如:
bigarray = [['website1','website2', 'website3', 'website4'],
['website1', 'website7', 'website9', 'website3'],
['website1','website2','website5', 'website9','website24','website36']]
基本上如果有人要输入' website1'它会返回
{'website2':2, 'website7':1}
如果他们要输入网站2就输出
{'website3':1,"website5":1}
等等。我希望我很清楚,如果没有,请发表评论,我会说得更清楚。我不知道如何高效快速地做到这一点,我已经集思广益,但我只能提出效率低下的方法。请帮忙,
这是我到目前为止所做的,但它并没有用频率做字典。我无法弄清楚如何在字典中获取频率,也无法弄清楚如何获得第二个第四个等元素搜索。这仅适用于第一个元素。
import numpy as np
import cherrypy as cp
def initialize(self):
pagearray = np.load("pagearray.npy")
def submit(self, input):
for i in pagearray:
if input==i[0]:
subpagearray += [i[1:]]
possibilities +=i[0]
return possibilities
谢谢, ˚F
答案 0 :(得分:0)
CTRL+P
这就是你制作字典的方法,但我不确定你的目的是什么,所以你可以用它作为模板
我想,我想出了你的目标。如果是这样,请告诉我:
def build_dict(a_list=None):
if a_list is None:
a_list = []
site_dict = {}
for site in a_list:
try:
site_dict[site] = site_dict[site] + 1
except KeyError:
site_dict[site] = 1
return site_dict
答案 1 :(得分:0)
您可以使用可以更好地解决问题的数据结构。 Here你可以在Python中找到一些选项。尽量避免过早优化,并尽可能简化代码。
答案 2 :(得分:0)
想出来......这就是我想要的:
import numpy as np
import simplejson as json
import cherrypy as cp
import operator
global pagearray
def initialize(self):
global pagearray
pagearray = np.load("pagearray.npy")
#return os.path
def getUserPath(self, input):
subpagearray = []
possibilities = []
global pagearray
for i in pagearray:
try:
if input==i[0]:
subpagearray += [i[1:]]
possibilities+= [i[1]]
except IndexError:
pass
x = build_dict(possibilities)
sorted_x = sorted(x.items(), key=operator.itemgetter(1), reverse=True)
pagearray = subpagearray
totalelements = len(pagearray)
returnvaluelist = []
weight = []
for i in sorted_x:
returnvaluelist += [i[0]]
weight += [(i[1]/(totalelements*1.0))*100]
return returnvaluelist, weight
def build_dict(a_list=None):
if a_list is None:
a_list = []
site_dict = {}
for site in a_list:
try:
site_dict[site] = site_dict[site] + 1
except KeyError:
site_dict[site] = 1
return site_dict