code: def attribute(cls,
                    d,
                    header=None,
                    order=None,
                    sort_keys=True,
                    output="table"):
          
  
          if header is None:
              header = ["Attribute", "Value"]
          if output == "table":
              x = PrettyTable(header)
              if order is not None:
                  sorted_list = order
              else:
                  sorted_list = list(d)
              if sort_keys:
                  sorted_list = sorted(d)
  
              for key in sorted_list:
                  if type(d[key]) == dict:
                      values = d[key]
                      x.add_row([key, "+"])
                      for e in values:
                          x.add_row(["  -", "{}: {}".format(e, values[e])])
                  elif type(d[key]) == list:
                      values = list(d[key])
                      x.add_row([key, "+"])
                      for e in values:
                          x.add_row(["  -", e])
                  else:
                      x.add_row([key, d[key] or ""])
  
              x.align = "l"
              return x
          else:
              return cls.dict({output: d}, output=output)
docs: prints a attribute/key value table 
           :param d: A a dict with dicts of the same type.
                         Each key will be a column
           :param order: The order in which the columns are printed.
                         The order is specified by the key names of the dict.
           :param header:  The Header of each of the columns
           :type header:   A list of string
           :param sort_keys:   Key(s) of the dict to be used for sorting.
                               This specify the column(s) in the table for sorting.
           :type sort_keys:    string or a tuple of string (for sorting with multiple columns)
           :param output: the output format table, csv, dict, json