flake8-comprehensions


Nameflake8-comprehensions JSON
Version 3.16.0 PyPI version JSON
download
home_pageNone
SummaryA flake8 plugin to help you write better list/set/dict comprehensions.
upload_time2024-10-27 21:51:18
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords comprehensions dict comprehension flake8 list comprehension set comprehension
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            =====================
flake8-comprehensions
=====================

.. image:: https://img.shields.io/github/actions/workflow/status/adamchainz/flake8-comprehensions/main.yml.svg?branch=main&style=for-the-badge
   :target: https://github.com/adamchainz/flake8-comprehensions/actions?workflow=CI

.. image:: https://img.shields.io/pypi/v/flake8-comprehensions.svg?style=for-the-badge
   :target: https://pypi.org/project/flake8-comprehensions/

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge
   :target: https://github.com/psf/black

.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge
   :target: https://github.com/pre-commit/pre-commit
   :alt: pre-commit

A `flake8 <https://flake8.readthedocs.io/en/latest/>`_ plugin that helps you write better list/set/dict comprehensions.

----

**Linting a Django project?**
Check out my book `Boost Your Django DX <https://adamchainz.gumroad.com/l/byddx>`__ which covers Flake8 and many other code quality tools.

----

Requirements
============

Python 3.9 to 3.13 supported.

Installation
============

First, install with ``pip``:

.. code-block:: sh

     python -m pip install flake8-comprehensions

Second, if you define Flake8’s ``select`` setting, add the ``C4`` prefix to it.
Otherwise, the plugin should be active by default.

Rules
=====

C400-402: Unnecessary generator - rewrite as a ``<list/set/dict>`` comprehension.
---------------------------------------------------------------------------------

Rules:

* C400 Unnecessary generator - rewrite as a list comprehension.
* C401 Unnecessary generator - rewrite as a set comprehension.
* C402 Unnecessary generator - rewrite as a dict comprehension.

It's unnecessary to use ``list``, ``set``, or ``dict`` around a generator expression, since there are equivalent comprehensions for these types.
For example:

* Rewrite ``list(f(x) for x in foo)`` as ``[f(x) for x in foo]``
* Rewrite ``set(f(x) for x in foo)`` as ``{f(x) for x in foo}``
* Rewrite ``dict((x, f(x)) for x in foo)`` as ``{x: f(x) for x in foo}``

C403-404: Unnecessary list comprehension - rewrite as a ``<set/dict>`` comprehension.
-------------------------------------------------------------------------------------

Rules:

* C403 Unnecessary list comprehension - rewrite as a set comprehension.
* C404 Unnecessary list comprehension - rewrite as a dict comprehension.

It's unnecessary to use a list comprehension inside a call to ``set`` or ``dict``, since there are equivalent comprehensions for these types.
For example:

* Rewrite ``set([f(x) for x in foo])`` as ``{f(x) for x in foo}``
* Rewrite ``dict([(x, f(x)) for x in foo])`` as ``{x: f(x) for x in foo}``

C405-406: Unnecessary ``<list/tuple>`` literal - rewrite as a ``<set/dict>`` literal.
-------------------------------------------------------------------------------------

* C405 Unnecessary ``<list/tuple>`` literal - rewrite as a set literal.
* C406 Unnecessary ``<list/tuple>`` literal - rewrite as a dict literal.

It's unnecessary to use a list or tuple literal within a call to ``set`` or ``dict``.
For example:

* Rewrite ``set([1, 2])`` as ``{1, 2}``
* Rewrite  ``set((1, 2))`` as ``{1, 2}``
* Rewrite ``set([])`` as ``set()``
* Rewrite ``dict([(1, 2)])`` as ``{1: 2}``
* Rewrite ``dict(((1, 2),))`` as ``{1: 2}``
* Rewrite ``dict([])`` as ``{}``

C407: Unnecessary ``<dict/list>`` comprehension - ``<builtin>`` can take a generator
------------------------------------------------------------------------------------

This rule was dropped in version 3.4.0, because it promoted an increase in laziness which could lead to bugs.

C408: Unnecessary ``<dict/list/tuple>`` call - rewrite as a literal.
--------------------------------------------------------------------

It's slower to call e.g. ``dict()`` than using the empty literal, because the name ``dict`` must be looked up in the global scope in case it has been rebound.
Same for the other two basic types here.
For example:

* Rewrite ``dict()`` as ``{}``
* Rewrite ``dict(a=1, b=2)`` as ``{"a": 1, "b": 2}``
* Rewrite ``list()`` as ``[]``
* Rewrite ``tuple()`` as ``()``

C409-410: Unnecessary ``<list/tuple>`` passed to ``<list/tuple>``\() - ``<advice>``.
------------------------------------------------------------------------------------

Rules:

* C409 Unnecessary ``<list/tuple>`` passed to tuple() - ``<advice>``.
* C410 Unnecessary list passed to list() - ``<advice>``.

Where ``<advice>`` is either:

* remove the outer call to ``<list/tuple>``\()
* rewrite as a ``<list/tuple>`` literal

It's unnecessary to use a list or tuple literal within a call to ``list`` or ``tuple``, since there is literal syntax for these types.
For example:

* Rewrite ``tuple([1, 2])`` as ``(1, 2)``
* Rewrite ``tuple((1, 2))`` as ``(1, 2)``
* Rewrite ``tuple([])`` as ``()``
* Rewrite ``list([1, 2])`` as ``[1, 2]``
* Rewrite ``list((1, 2))`` as ``[1, 2]``
* Rewrite ``list([])`` as ``[]``

C411: Unnecessary list call - remove the outer call to list().
--------------------------------------------------------------

It's unnecessary to use a ``list`` around a list comprehension, since it is equivalent without it.
For example:

* Rewrite ``list([f(x) for x in foo])`` as ``[f(x) for x in foo]``

C412: Unnecessary ``<dict/list/set>`` comprehension - 'in' can take a generator.
--------------------------------------------------------------------------------

This rule was dropped in version 3.4.0, because it promoted an increase in laziness which could lead to bugs.

C413: Unnecessary ``<list/reversed>`` call around sorted().
-----------------------------------------------------------

It's unnecessary to use ``list()`` around ``sorted()`` as it already returns a list.
It is also unnecessary to use ``reversed()`` around ``sorted()`` as the latter has a ``reverse`` argument.
For example:

* Rewrite ``list(sorted([2, 3, 1]))`` as ``sorted([2, 3, 1])``
* Rewrite ``reversed(sorted([2, 3, 1]))`` as ``sorted([2, 3, 1], reverse=True)``
* Rewrite ``reversed(sorted([2, 3, 1], reverse=True))`` as ``sorted([2, 3, 1])``

C414: Unnecessary ``<list/reversed/set/sorted/tuple>`` call within ``<list/set/sorted/tuple>``\().
--------------------------------------------------------------------------------------------------

It's unnecessary to double-cast or double-process iterables by wrapping the listed functions within ``list``/``set``/``sorted``/``tuple``.
For example:

* Rewrite ``list(list(iterable))`` as ``list(iterable)``
* Rewrite ``list(tuple(iterable))`` as ``list(iterable)``
* Rewrite ``tuple(list(iterable))`` as ``tuple(iterable)``
* Rewrite ``tuple(tuple(iterable))`` as ``tuple(iterable)``
* Rewrite ``set(set(iterable))`` as ``set(iterable)``
* Rewrite ``set(list(iterable))`` as ``set(iterable)``
* Rewrite ``set(tuple(iterable))`` as ``set(iterable)``
* Rewrite ``set(sorted(iterable))`` as ``set(iterable)``
* Rewrite ``set(reversed(iterable))`` as ``set(iterable)``
* Rewrite ``sorted(list(iterable))`` as ``sorted(iterable)``
* Rewrite ``sorted(tuple(iterable))`` as ``sorted(iterable)``
* Rewrite ``sorted(sorted(iterable))`` as ``sorted(iterable)``
* Rewrite ``sorted(reversed(iterable))`` as ``sorted(iterable)``

C415: Unnecessary subscript reversal of iterable within ``<reversed/set/sorted>``\().
-------------------------------------------------------------------------------------

It's unnecessary to reverse the order of an iterable when passing it into one of the listed functions will change the order again.
For example:

* Rewrite ``set(iterable[::-1])`` as ``set(iterable)``
* Rewrite ``sorted(iterable)[::-1]`` as ``sorted(iterable, reverse=True)``
* Rewrite ``reversed(iterable[::-1])`` as ``iterable``

C416: Unnecessary ``<dict/list/set>`` comprehension - rewrite using ``<dict/list/set>``\().
-------------------------------------------------------------------------------------------

It's unnecessary to use a dict/list/set comprehension to build a data structure if the elements are unchanged.
Wrap the iterable with ``dict()``, ``list()``, or ``set()`` instead.
For example:

* Rewrite ``{a: b for a, b in iterable}`` as ``dict(iterable)``
* Rewrite ``[x for x in iterable]`` as ``list(iterable)``
* Rewrite ``{x for x in iterable}`` as ``set(iterable)``

C417: Unnecessary ``map`` usage - rewrite using a generator expression/``<list/set/dict>`` comprehension.
---------------------------------------------------------------------------------------------------------

``map(func, iterable)`` has great performance when ``func`` is a built-in function, and it makes sense if your function already has a name.
But if your func is a ``lambda``, it’s faster to use a generator expression or a comprehension, as it avoids the function call overhead.
For example:

* Rewrite ``map(lambda x: x + 1, iterable)`` to ``(x + 1 for x in iterable)``
* Rewrite ``map(lambda item: get_id(item), items)`` to ``(get_id(item) for item in items)``
* Rewrite ``list(map(lambda num: num * 2, nums))`` to ``[num * 2 for num in nums]``
* Rewrite ``set(map(lambda num: num % 2 == 0, nums))`` to ``{num % 2 == 0 for num in nums}``
* Rewrite ``dict(map(lambda v: (v, v ** 2), values))`` to ``{v : v ** 2 for v in values}``

C418: Unnecessary ``<dict/dict comprehension>`` passed to dict() - remove the outer call to dict()
--------------------------------------------------------------------------------------------------

It's unnecessary to use a ``dict`` around a dict literal or dict comprehension, since either syntax already constructs a dict.
For example:

* Rewrite ``dict({})`` as ``{}``
* Rewrite ``dict({"a": 1})`` as ``{"a": 1}``

C419 Unnecessary list comprehension in ``<any/all>``\() prevents short-circuiting - rewrite as a generator.
-----------------------------------------------------------------------------------------------------------

Using a list comprehension inside a call to ``any()``/``all()`` prevents short-circuiting when a ``True`` / ``False`` value is found.
The whole list will be constructed before calling ``any()``/``all()``, potentially wasting work.part-way.
Rewrite to use a generator expression, which can stop part way.
For example:

* Rewrite ``all([condition(x) for x in iterable])`` as ``all(condition(x) for x in iterable)``
* Rewrite ``any([condition(x) for x in iterable])`` as ``any(condition(x) for x in iterable)``

C420: Unnecessary dict comprehension - rewrite using dict.fromkeys().
----------------------------------------------------------------------

It's unnecessary to use a dict comprehension to build a dict with all values set to the same constant.
Use ``dict.fromkeys()`` instead, which is faster.
For example:

* Rewrite ``{x: 1 for x in iterable}`` as ``dict.fromkeys(iterable, 1)``
* Rewrite ``{x: None for x in iterable}`` as ``dict.fromkeys(iterable)``

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "flake8-comprehensions",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "comprehensions, dict comprehension, flake8, list comprehension, set comprehension",
    "author": null,
    "author_email": "Adam Johnson <me@adamj.eu>",
    "download_url": "https://files.pythonhosted.org/packages/6d/7d/7ffaa876ca5b330fc244287208dce1d12515b88a69488ea90ab58c94501d/flake8_comprehensions-3.16.0.tar.gz",
    "platform": null,
    "description": "=====================\nflake8-comprehensions\n=====================\n\n.. image:: https://img.shields.io/github/actions/workflow/status/adamchainz/flake8-comprehensions/main.yml.svg?branch=main&style=for-the-badge\n   :target: https://github.com/adamchainz/flake8-comprehensions/actions?workflow=CI\n\n.. image:: https://img.shields.io/pypi/v/flake8-comprehensions.svg?style=for-the-badge\n   :target: https://pypi.org/project/flake8-comprehensions/\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge\n   :target: https://github.com/psf/black\n\n.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge\n   :target: https://github.com/pre-commit/pre-commit\n   :alt: pre-commit\n\nA `flake8 <https://flake8.readthedocs.io/en/latest/>`_ plugin that helps you write better list/set/dict comprehensions.\n\n----\n\n**Linting a Django project?**\nCheck out my book `Boost Your Django DX <https://adamchainz.gumroad.com/l/byddx>`__ which covers Flake8 and many other code quality tools.\n\n----\n\nRequirements\n============\n\nPython 3.9 to 3.13 supported.\n\nInstallation\n============\n\nFirst, install with ``pip``:\n\n.. code-block:: sh\n\n     python -m pip install flake8-comprehensions\n\nSecond, if you define Flake8\u2019s ``select`` setting, add the ``C4`` prefix to it.\nOtherwise, the plugin should be active by default.\n\nRules\n=====\n\nC400-402: Unnecessary generator - rewrite as a ``<list/set/dict>`` comprehension.\n---------------------------------------------------------------------------------\n\nRules:\n\n* C400 Unnecessary generator - rewrite as a list comprehension.\n* C401 Unnecessary generator - rewrite as a set comprehension.\n* C402 Unnecessary generator - rewrite as a dict comprehension.\n\nIt's unnecessary to use ``list``, ``set``, or ``dict`` around a generator expression, since there are equivalent comprehensions for these types.\nFor example:\n\n* Rewrite ``list(f(x) for x in foo)`` as ``[f(x) for x in foo]``\n* Rewrite ``set(f(x) for x in foo)`` as ``{f(x) for x in foo}``\n* Rewrite ``dict((x, f(x)) for x in foo)`` as ``{x: f(x) for x in foo}``\n\nC403-404: Unnecessary list comprehension - rewrite as a ``<set/dict>`` comprehension.\n-------------------------------------------------------------------------------------\n\nRules:\n\n* C403 Unnecessary list comprehension - rewrite as a set comprehension.\n* C404 Unnecessary list comprehension - rewrite as a dict comprehension.\n\nIt's unnecessary to use a list comprehension inside a call to ``set`` or ``dict``, since there are equivalent comprehensions for these types.\nFor example:\n\n* Rewrite ``set([f(x) for x in foo])`` as ``{f(x) for x in foo}``\n* Rewrite ``dict([(x, f(x)) for x in foo])`` as ``{x: f(x) for x in foo}``\n\nC405-406: Unnecessary ``<list/tuple>`` literal - rewrite as a ``<set/dict>`` literal.\n-------------------------------------------------------------------------------------\n\n* C405 Unnecessary ``<list/tuple>`` literal - rewrite as a set literal.\n* C406 Unnecessary ``<list/tuple>`` literal - rewrite as a dict literal.\n\nIt's unnecessary to use a list or tuple literal within a call to ``set`` or ``dict``.\nFor example:\n\n* Rewrite ``set([1, 2])`` as ``{1, 2}``\n* Rewrite  ``set((1, 2))`` as ``{1, 2}``\n* Rewrite ``set([])`` as ``set()``\n* Rewrite ``dict([(1, 2)])`` as ``{1: 2}``\n* Rewrite ``dict(((1, 2),))`` as ``{1: 2}``\n* Rewrite ``dict([])`` as ``{}``\n\nC407: Unnecessary ``<dict/list>`` comprehension - ``<builtin>`` can take a generator\n------------------------------------------------------------------------------------\n\nThis rule was dropped in version 3.4.0, because it promoted an increase in laziness which could lead to bugs.\n\nC408: Unnecessary ``<dict/list/tuple>`` call - rewrite as a literal.\n--------------------------------------------------------------------\n\nIt's slower to call e.g. ``dict()`` than using the empty literal, because the name ``dict`` must be looked up in the global scope in case it has been rebound.\nSame for the other two basic types here.\nFor example:\n\n* Rewrite ``dict()`` as ``{}``\n* Rewrite ``dict(a=1, b=2)`` as ``{\"a\": 1, \"b\": 2}``\n* Rewrite ``list()`` as ``[]``\n* Rewrite ``tuple()`` as ``()``\n\nC409-410: Unnecessary ``<list/tuple>`` passed to ``<list/tuple>``\\() - ``<advice>``.\n------------------------------------------------------------------------------------\n\nRules:\n\n* C409 Unnecessary ``<list/tuple>`` passed to tuple() - ``<advice>``.\n* C410 Unnecessary list passed to list() - ``<advice>``.\n\nWhere ``<advice>`` is either:\n\n* remove the outer call to ``<list/tuple>``\\()\n* rewrite as a ``<list/tuple>`` literal\n\nIt's unnecessary to use a list or tuple literal within a call to ``list`` or ``tuple``, since there is literal syntax for these types.\nFor example:\n\n* Rewrite ``tuple([1, 2])`` as ``(1, 2)``\n* Rewrite ``tuple((1, 2))`` as ``(1, 2)``\n* Rewrite ``tuple([])`` as ``()``\n* Rewrite ``list([1, 2])`` as ``[1, 2]``\n* Rewrite ``list((1, 2))`` as ``[1, 2]``\n* Rewrite ``list([])`` as ``[]``\n\nC411: Unnecessary list call - remove the outer call to list().\n--------------------------------------------------------------\n\nIt's unnecessary to use a ``list`` around a list comprehension, since it is equivalent without it.\nFor example:\n\n* Rewrite ``list([f(x) for x in foo])`` as ``[f(x) for x in foo]``\n\nC412: Unnecessary ``<dict/list/set>`` comprehension - 'in' can take a generator.\n--------------------------------------------------------------------------------\n\nThis rule was dropped in version 3.4.0, because it promoted an increase in laziness which could lead to bugs.\n\nC413: Unnecessary ``<list/reversed>`` call around sorted().\n-----------------------------------------------------------\n\nIt's unnecessary to use ``list()`` around ``sorted()`` as it already returns a list.\nIt is also unnecessary to use ``reversed()`` around ``sorted()`` as the latter has a ``reverse`` argument.\nFor example:\n\n* Rewrite ``list(sorted([2, 3, 1]))`` as ``sorted([2, 3, 1])``\n* Rewrite ``reversed(sorted([2, 3, 1]))`` as ``sorted([2, 3, 1], reverse=True)``\n* Rewrite ``reversed(sorted([2, 3, 1], reverse=True))`` as ``sorted([2, 3, 1])``\n\nC414: Unnecessary ``<list/reversed/set/sorted/tuple>`` call within ``<list/set/sorted/tuple>``\\().\n--------------------------------------------------------------------------------------------------\n\nIt's unnecessary to double-cast or double-process iterables by wrapping the listed functions within ``list``/``set``/``sorted``/``tuple``.\nFor example:\n\n* Rewrite ``list(list(iterable))`` as ``list(iterable)``\n* Rewrite ``list(tuple(iterable))`` as ``list(iterable)``\n* Rewrite ``tuple(list(iterable))`` as ``tuple(iterable)``\n* Rewrite ``tuple(tuple(iterable))`` as ``tuple(iterable)``\n* Rewrite ``set(set(iterable))`` as ``set(iterable)``\n* Rewrite ``set(list(iterable))`` as ``set(iterable)``\n* Rewrite ``set(tuple(iterable))`` as ``set(iterable)``\n* Rewrite ``set(sorted(iterable))`` as ``set(iterable)``\n* Rewrite ``set(reversed(iterable))`` as ``set(iterable)``\n* Rewrite ``sorted(list(iterable))`` as ``sorted(iterable)``\n* Rewrite ``sorted(tuple(iterable))`` as ``sorted(iterable)``\n* Rewrite ``sorted(sorted(iterable))`` as ``sorted(iterable)``\n* Rewrite ``sorted(reversed(iterable))`` as ``sorted(iterable)``\n\nC415: Unnecessary subscript reversal of iterable within ``<reversed/set/sorted>``\\().\n-------------------------------------------------------------------------------------\n\nIt's unnecessary to reverse the order of an iterable when passing it into one of the listed functions will change the order again.\nFor example:\n\n* Rewrite ``set(iterable[::-1])`` as ``set(iterable)``\n* Rewrite ``sorted(iterable)[::-1]`` as ``sorted(iterable, reverse=True)``\n* Rewrite ``reversed(iterable[::-1])`` as ``iterable``\n\nC416: Unnecessary ``<dict/list/set>`` comprehension - rewrite using ``<dict/list/set>``\\().\n-------------------------------------------------------------------------------------------\n\nIt's unnecessary to use a dict/list/set comprehension to build a data structure if the elements are unchanged.\nWrap the iterable with ``dict()``, ``list()``, or ``set()`` instead.\nFor example:\n\n* Rewrite ``{a: b for a, b in iterable}`` as ``dict(iterable)``\n* Rewrite ``[x for x in iterable]`` as ``list(iterable)``\n* Rewrite ``{x for x in iterable}`` as ``set(iterable)``\n\nC417: Unnecessary ``map`` usage - rewrite using a generator expression/``<list/set/dict>`` comprehension.\n---------------------------------------------------------------------------------------------------------\n\n``map(func, iterable)`` has great performance when ``func`` is a built-in function, and it makes sense if your function already has a name.\nBut if your func is a ``lambda``, it\u2019s faster to use a generator expression or a comprehension, as it avoids the function call overhead.\nFor example:\n\n* Rewrite ``map(lambda x: x + 1, iterable)`` to ``(x + 1 for x in iterable)``\n* Rewrite ``map(lambda item: get_id(item), items)`` to ``(get_id(item) for item in items)``\n* Rewrite ``list(map(lambda num: num * 2, nums))`` to ``[num * 2 for num in nums]``\n* Rewrite ``set(map(lambda num: num % 2 == 0, nums))`` to ``{num % 2 == 0 for num in nums}``\n* Rewrite ``dict(map(lambda v: (v, v ** 2), values))`` to ``{v : v ** 2 for v in values}``\n\nC418: Unnecessary ``<dict/dict comprehension>`` passed to dict() - remove the outer call to dict()\n--------------------------------------------------------------------------------------------------\n\nIt's unnecessary to use a ``dict`` around a dict literal or dict comprehension, since either syntax already constructs a dict.\nFor example:\n\n* Rewrite ``dict({})`` as ``{}``\n* Rewrite ``dict({\"a\": 1})`` as ``{\"a\": 1}``\n\nC419 Unnecessary list comprehension in ``<any/all>``\\() prevents short-circuiting - rewrite as a generator.\n-----------------------------------------------------------------------------------------------------------\n\nUsing a list comprehension inside a call to ``any()``/``all()`` prevents short-circuiting when a ``True`` / ``False`` value is found.\nThe whole list will be constructed before calling ``any()``/``all()``, potentially wasting work.part-way.\nRewrite to use a generator expression, which can stop part way.\nFor example:\n\n* Rewrite ``all([condition(x) for x in iterable])`` as ``all(condition(x) for x in iterable)``\n* Rewrite ``any([condition(x) for x in iterable])`` as ``any(condition(x) for x in iterable)``\n\nC420: Unnecessary dict comprehension - rewrite using dict.fromkeys().\n----------------------------------------------------------------------\n\nIt's unnecessary to use a dict comprehension to build a dict with all values set to the same constant.\nUse ``dict.fromkeys()`` instead, which is faster.\nFor example:\n\n* Rewrite ``{x: 1 for x in iterable}`` as ``dict.fromkeys(iterable, 1)``\n* Rewrite ``{x: None for x in iterable}`` as ``dict.fromkeys(iterable)``\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A flake8 plugin to help you write better list/set/dict comprehensions.",
    "version": "3.16.0",
    "project_urls": {
        "Changelog": "https://github.com/adamchainz/flake8-comprehensions/blob/main/CHANGELOG.rst",
        "Funding": "https://adamj.eu/books/",
        "Repository": "https://github.com/adamchainz/flake8-comprehensions"
    },
    "split_keywords": [
        "comprehensions",
        " dict comprehension",
        " flake8",
        " list comprehension",
        " set comprehension"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5fbf0cf8d3c9a233620840f209490c4907d7d416d066557396ebda678c58de09",
                "md5": "4cdd67d5e700543c1e106f1021609f67",
                "sha256": "7c1eadc9d22e765f39857798febe7766b4d9c519793c6c149e3e13bf99693f70"
            },
            "downloads": -1,
            "filename": "flake8_comprehensions-3.16.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4cdd67d5e700543c1e106f1021609f67",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 8169,
            "upload_time": "2024-10-27T21:51:16",
            "upload_time_iso_8601": "2024-10-27T21:51:16.464559Z",
            "url": "https://files.pythonhosted.org/packages/5f/bf/0cf8d3c9a233620840f209490c4907d7d416d066557396ebda678c58de09/flake8_comprehensions-3.16.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6d7d7ffaa876ca5b330fc244287208dce1d12515b88a69488ea90ab58c94501d",
                "md5": "d21f01ca9146850b86a1ae7bce8fe441",
                "sha256": "9cbf789905a8f03f9d350fb82b17b264d9a16c7ce3542b2a7b871ef568cafabe"
            },
            "downloads": -1,
            "filename": "flake8_comprehensions-3.16.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d21f01ca9146850b86a1ae7bce8fe441",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 12991,
            "upload_time": "2024-10-27T21:51:18",
            "upload_time_iso_8601": "2024-10-27T21:51:18.029104Z",
            "url": "https://files.pythonhosted.org/packages/6d/7d/7ffaa876ca5b330fc244287208dce1d12515b88a69488ea90ab58c94501d/flake8_comprehensions-3.16.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-27 21:51:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "adamchainz",
    "github_project": "flake8-comprehensions",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "flake8-comprehensions"
}
        
Elapsed time: 0.38611s