Python Append Key
Building a dict and ordering it into groups by key is sometimes very useful.
Teh following code show using the if .. in option and defaultdict option of checkign for a key when loading the dictionary. Although people warn that using has_key or if .. in type checks slows it down a lot my timings was fairly similar. I left some commented code in for my own reference.
source
from collections import defaultdictfrom time import time
sample_size = 10000000
dct1 = defaultdict(list)dct1 = {}st_time = time()
for i in range(1, sample_size): s = str(i) key = s[0:1] name = 'server' + s dct1.setdefault(key, []).append({'name':name,'status':'RUNNING'}) # returns None!
print (f"\ndct1 defaultdict option: {time() - st_time}")
#print (dct1)# get one key#one_key = dct1.get('2')#print (one_key)#for v in one_key:# print (v)
# print by key#for k,v in dct1.items():# print("\nkey == {}".format(k))# print (v)# #for i in v:# # print(" {} {}".format(i["name"], i["status"]))
dct2 = {}st_time = time()
for i in range(1, sample_size): s = str(i) key = s[0:1] name = 'server' + s if key in dct2: dct2[key].append({'name':name,'status': 'STOPPED'}) else: dct2.update({key: [{'name': name,'status': 'STOPPED'}]})
print (f"\ndct2 if .. in option: {time() - st_time}")
#print (dct2)#one_key = dct1.get('1')#print (one_key)#for v in one_key:# print (v)
# print by key#for k,v in dct2.items():# print("\nkey == {}".format(k))# print (v)# #for i in v:# # print(" {} {}".format(i["name"], i["status"]))test
py-assoc-arr$ python3 py-keyed-dict-timing.py
dct1 defaultdict option: 6.392352342605591
dct2 if .. in option: 6.472132921218872