code: def parse_attrlist_0(str_, avs_sep=":", vs_sep=",", as_sep=";"):
      
      return [(a, vs) for a, vs in attr_val_itr(str_, avs_sep, vs_sep, as_sep)]
docs: Simple parser to parse expressions in the form of
      [ATTR1:VAL0,VAL1,...;ATTR2:VAL0,VAL2,..].
  
      :param str_: input string
      :param avs_sep:  char to separate attribute and values
      :param vs_sep:  char to separate values
      :param as_sep:  char to separate attributes
  
      :return:
          a list of tuples of (key, value | [value])
              where key = (Int | String | ...),
              value = (Int | Bool | String | ...) | [Int | Bool | String | ...]
  
      >>> parse_attrlist_0("a:1")
      [('a', 1)]
      >>> parse_attrlist_0("a:1;b:xyz")
      [('a', 1), ('b', 'xyz')]
      >>> parse_attrlist_0("requires:bash,zsh")
      [('requires', ['bash', 'zsh'])]
      >>> parse_attrlist_0("obsoletes:sysdata;conflicts:sysdata-old")
      [('obsoletes', 'sysdata'), ('conflicts', 'sysdata-old')]