считать ноль вхождений, выбирая случайным образом - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующий список с некоторыми значениями, которые я извлек из файла 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

Затем я ловлю пуа и сохраняю его в список A:

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']

Теперь яЯ выбираю случайным образом 10 значений из списка A с помощью следующего метода numpy:

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 голосов
/ 19 октября 2018

Вы можете попробовать следующее понимание списка:

zero_occurences = [e for e in pois if e not in unique]
0 голосов
/ 19 октября 2018

Вы можете использовать dict.fromkeys, который создает новый словарь из заданной последовательности элементов со значением (необязательно).

Позже, используйте метод update для обновления созданногословарь с counts.

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

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

group_cat = <b>dict.fromkeys(listA, 0)</b>
group_cat<b>.update(zip(unique, counts))</b>

print(group_cat)
0 голосов
/ 19 октября 2018
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
...