You cannot modify directly the internal list attribute with pymongo, need to pull the whole document and republish it:
my_doc = col.find_one({'_id': my_str})
if my_doc is not None:
# Document exist, modify it
my_doc['hours'].append({"14": "yet another thing"})
col.update({'_id': my_str}, my_doc)
else:
# Insert the new document with all the new attributes
col.insert({'_id': my_str, 'hours': [{"14": "yet another thing"}]})