refactor string and dict(not finish yet)