code: def read_ligolw_dict(source, names=None, coalesce=False, **kwargs):
      
      xmldoc = read_ligolw(source, contenthandler=segment_content_handler())
  
      # parse tables
      with patch_ligotimegps(type(xmldoc.childNodes[0]).__module__):
          out = DataQualityDict.from_ligolw_tables(
              *xmldoc.childNodes,
              names=names,
              **kwargs
          )
  
      # coalesce
      if coalesce:
          for flag in out:
              out[flag].coalesce()
  
      return out
docs: Read segments for the given flag from the LIGO_LW XML file.
  
      Parameters
      ----------
      source : `file`, `str`, :class:`~ligo.lw.ligolw.Document`, `list`
          one (or more) open files or file paths, or LIGO_LW `Document` objects
  
      names : `list`, `None`, optional
          list of names to read or `None` to read all into a single
          `DataQualityFlag`.
  
      coalesce : `bool`, optional
          if `True`, coalesce all parsed `DataQualityFlag` objects before
          returning, default: `False`
  
      **kwargs
          other keywords are passed to :meth:`DataQualityDict.from_ligolw_tables`
  
      Returns
      -------
      flagdict : `DataQualityDict`
          a new `DataQualityDict` of `DataQualityFlag` entries with ``active``
          and ``known`` segments seeded from the XML tables in the given
          file ``fp``.