说我有以下列表,其中包含一些值,这些值是从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, ....}
如何将所有未选择的值也保存在字典中?
答案 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)