.. _RewriteToComprehensionRule:

==========================
RewriteToComprehensionRule
==========================

A derivative of flake8-comprehensions's C400-C402 and C403-C404.
Comprehensions are more efficient than functions calls. This C400-C402
suggest to use `dict/set/list` comprehensions rather than respective
function calls whenever possible. C403-C404 suggest to remove unnecessary
list comprehension in a set/dict call, and replace it with set/dict
comprehension.

----------------
Has Autofix: Yes
----------------

-------------------
VALID Code Examples
-------------------

# 1:







.. code-block:: python

            [val for val in iterable]




# 2:







.. code-block:: python

            {val for val in iterable}




# 3:







.. code-block:: python

            {val: val+1 for val in iterable}




.. container:: toggle


    # 4:







    .. code-block:: python

                dict(line.strip().split('=', 1) for line in attr_file)





---------------------
INVALID Code Examples
---------------------

# 1:







.. code-block:: python

            list(val for val in iterable)




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -list(val for val in iterable)
    +[val for val in iterable]

# 2:







.. code-block:: python

            list(val for row in matrix for val in row)




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -list(val for row in matrix for val in row)
    +[val for row in matrix for val in row]

# 3:







.. code-block:: python

            set(val for val in iterable)




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -set(val for val in iterable)
    +{val for val in iterable}

.. container:: toggle


    # 4:







    .. code-block:: python

                dict((x, f(x)) for val in iterable)




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict((x, f(x)) for val in iterable)
        +{x: f(x) for val in iterable}


    # 5:







    .. code-block:: python

                dict((x, y) for y, x in iterable)




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict((x, y) for y, x in iterable)
        +{x: y for y, x in iterable}


    # 6:







    .. code-block:: python

                dict([val, val+1] for val in iterable)




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict([val, val+1] for val in iterable)
        +{val: val+1 for val in iterable}


    # 7:







    .. code-block:: python

                dict((x["name"], json.loads(x["data"])) for x in responses)




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict((x["name"], json.loads(x["data"])) for x in responses)
        +{x["name"]: json.loads(x["data"]) for x in responses}


    # 8:







    .. code-block:: python

                dict((k, v) for k, v in iter for iter in iters)




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict((k, v) for k, v in iter for iter in iters)
        +{k: v for k, v in iter for iter in iters}


    # 9:







    .. code-block:: python

                set([val for val in iterable])




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -set([val for val in iterable])
        +{val for val in iterable}


    # 10:







    .. code-block:: python

                dict([[val, val+1] for val in iterable])




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict([[val, val+1] for val in iterable])
        +{val: val+1 for val in iterable}


    # 11:







    .. code-block:: python

                dict([(x, f(x)) for x in foo])




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict([(x, f(x)) for x in foo])
        +{x: f(x) for x in foo}


    # 12:







    .. code-block:: python

                dict([(x, y) for y, x in iterable])




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -dict([(x, y) for y, x in iterable])
        +{x: y for y, x in iterable}


    # 13:







    .. code-block:: python

                set([val for row in matrix for val in row])




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -set([val for row in matrix for val in row])
        +{val for row in matrix for val in row}

