通过随机选择来计数零发生次数

时间:2018-10-19 09:15:32

标签: python numpy random

说我有以下列表,其中包含一些值,这些值是从json文件中检索的:

def read_json(object):
    categories_list = []
    object=json.loads(object)  
    for feature in object['features']: 
        categories = feature['properties']['category_ids']
        for category_Id in categories:
            categories_list.append(category_Id)

     pois = np.array(categories_list)

return pois

然后我捕获了pois并将其保存到listA:

listA = read_json(json_object)

listA= [u'156' u'204' u'426' u'488' u'426' u'570' u'488' u'564' u'426'  u'208' u'476' u'566' u'429' u'395' u'570' u'280' u'570' u'108' u'395' u'426' u'570' u'208' u'280' u'426' u'449' u'108' u'570' u'395' u'192' u'204' u'570' u'569' u'156' u'192' u'518' u'192' u'570' u'469' u'395' u'426' u'566' u'156' u'208' u'561' u'449' u'518' u'208' u'280' u'280' u'430' u'566' u'203' u'566' u'570' u'280' u'570' u'570' u'108' u'518' u'570' u'564' u'516' u'280' u'426' u'569' u'280' u'570' u'566' u'426' u'564'u'570' u'485' u'395' u'108' u'570' u'391' u'395' u'280' u'192' u'566']

现在,我使用以下numpy方法从listA中随机选择10个值:

subsample = np.random.choice(listA, 10, replace=False)

subsample的输出是:

[u'204' u'566' u'570' u'206' u'570' u'570' u'518' u'561' u'192' u'570']

然后我要计算相同的值,并将其保存到字典中

unique, counts = np.unique(subsample, return_counts=True)
group_cat =dict(zip(unique, counts))

group_cat的输出:

{u'204': 1, u'206': 1, u'561': 1, u'570': 4, u'566': 1, u'192': 1, u'518': 1}

但是,我的目的是计算listA中也出现的所有零个事件。我的输出应如下所示:

{u'204': 1, u'206': 1, u'561': 1, u'570': 4, u'566': 1, u'192': 1,
u'518': 1, u'395':0, u'429':0, u'108':0, u'564':0, ....}

如何将所有未选择的值也保存在字典中?

3 个答案:

答案 0 :(得分:0)

listA= [u'156' u'204' u'426' u'488' u'426' u'570' u'488' u'564' u'426'  u'208' u'476' u'566' u'429' u'395' u'570' u'280' u'570' u'108' u'395' u'426' u'570' u'208' u'280' u'426' u'449' u'108' u'570' u'395' u'192' u'204' u'570' u'569' u'156' u'192' u'518' u'192' u'570' u'469' u'395' u'426' u'566' u'156' u'208' u'561' u'449' u'518' u'208' u'280' u'280' u'430' u'566' u'203' u'566' u'570' u'280' u'570' u'570' u'108' u'518' u'570' u'564' u'516' u'280' u'426' u'569' u'280' u'570' u'566' u'426' u'564'u'570' u'485' u'395' u'108' u'570' u'391' u'395' u'280' u'192' u'566']

subsample = np.random.choice(listA, 10, replace=False)
uniques, counts = np.unique(subsample, return_counts=True)
dictA = {e:0 for e in listA}    
for unique, count in zip(uniques, counts):
    dictA[unique] = count

或更简单:

listA= [u'156' u'204' u'426' u'488' u'426' u'570' u'488' u'564' u'426'  u'208' u'476' u'566' u'429' u'395' u'570' u'280' u'570' u'108' u'395' u'426' u'570' u'208' u'280' u'426' u'449' u'108' u'570' u'395' u'192' u'204' u'570' u'569' u'156' u'192' u'518' u'192' u'570' u'469' u'395' u'426' u'566' u'156' u'208' u'561' u'449' u'518' u'208' u'280' u'280' u'430' u'566' u'203' u'566' u'570' u'280' u'570' u'570' u'108' u'518' u'570' u'564' u'516' u'280' u'426' u'569' u'280' u'570' u'566' u'426' u'564'u'570' u'485' u'395' u'108' u'570' u'391' u'395' u'280' u'192' u'566']
dictA = {e:0 for e in listA}    
subsample = np.random.choice(listA, 10, replace=False)
for e in subsample:
    dictA[e]+=1

答案 1 :(得分:0)

您可以尝试以下列表理解:

zero_occurences = [e for e in pois if e not in unique]

答案 2 :(得分:0)

您可以使用 dict.fromkeys 来从给定的元素序列中创建一个带有值(可选)的新字典。

稍后,使用update方法用counts更新创建的字典。

subsample = np.random.choice(listA, 10, replace=False)

unique, counts = np.unique(subsample, return_counts=True)

group_cat = dict.fromkeys(listA, 0)
group_cat.update(zip(unique, counts))

print(group_cat)