The build_crystal_structures() method is aimed at extracting a cctbx xray.structure object from a small molecule cif file, and isn't aimed at mmcif-format files, so in your case it looks through all the data blocks in the provided CIF, can't find any suitable xray.structures, so returns an empty dictionary. If you simply want to access the raw CIF items from the file, then this code snippet shows how you can extract (e.g.) the Rwork from the 1NXC cif block:
import iotbx.cif
reader = iotbx.cif.reader(file_path="1NXC.cif")
cif = reader.model()
cif_block = cif["1NXC"]
# get a single item from cif_block
print cif_block["_refine.ls_R_factor_R_work"]
# get a looped item from cif_block
If you want to extract the model for your crystal structure, then probably the most useful thing to do is extract a pdb.hierarchy object (the cctbx's internal representation of a PDB/mmCIF structure file). This functionality can accept both PDB and mmCIF files as input:
import iotbx.pdb
# this works exactly the same for pdb files
pdb_input = iotbx.pdb.input(file_name="1NXC.cif")
pdb_hierarchy = pdb_input.construct_hierarchy()
Alternatively, if you are only reading mmCIF files, need access to both the raw cif items and the pdb_hierarchy, and are concerned about overhead of reading mmCIF twice (only really relevant for extremely large files), then you can pass the cif object created above to the iotbx.pdb.mmcif.cif_input�function:
import iotbx.pdb.mmcif
pdb_input = iotbx.pdb.mmcif.cif_input(cif_object=cif)
pdb_hierarchy = pdb_input.construct_hierarchy()