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:

[val for val in iterable]

# 2:

{val for val in iterable}

# 3:

{val: val+1 for val in iterable}

# 4:

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

INVALID Code Examples

# 1:

list(val for val in iterable)

Autofix:

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

# 2:

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

Autofix:

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

# 3:

set(val for val in iterable)

Autofix:

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

# 4:

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

Autofix:

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

# 5:

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

Autofix:

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

# 6:

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

Autofix:

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

# 7:

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

Autofix:

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

# 8:

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

Autofix:

---
+++
@@ -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:

set([val for val in iterable])

Autofix:

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

# 10:

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

Autofix:

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

# 11:

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

Autofix:

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

# 12:

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

Autofix:

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

# 13:

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

Autofix:

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