Turns pyLint/TwistedChecker output into something more useful.

    @param warnings: The warnings to process. Needs to be in pyLint's
        'parseable' format.

    @return: L{dict} of L{list}s

def parsePyLintWarnings(warnings):
    """
    Turns pyLint/TwistedChecker output into something more useful.

    @param warnings: The warnings to process. Needs to be in pyLint's
        'parseable' format.

    @return: L{dict} of L{list}s
    """

    warningsDict = {}

    for line in warnings:

        match = re.search(P_PYLINT_ERROR, line)

        if match:
            matchDict = match.groupdict()

            if not warningsDict.get(matchDict["file"]):
                warningsDict[matchDict["file"]] = []

            warningEntry = {
                "line": matchDict.get("file"),
                "warning_id": matchDict.get("type") + matchDict.get("errno"),
            }

            if matchDict.get("msg"):
                warningEntry["warning_message"] = matchDict.get("msg")

            warningsDict[matchDict["file"]].append(warningEntry)

    return warningsDict