Numpy Arrays:搜索子数组

时间:2015-07-28 17:54:05

标签: python arrays search numpy dictionary

基本上,我有一堆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

3 个答案:

答案 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