在Python 3.x中使用if / else进行字典理解

Use of if/else in an dictionary comprehension in Python 3.x

本问题已经有最佳答案,请猛点这里访问。

假设我有:

1
2
3
4
5
l = [
    ['Brasil', 'Italia', [10, 9]],
    ['Brasil', 'Espanha', [5, 7]],
    ['Italia', 'Espanha', [7,8]],
    ]

一句空话:

1
d = {}

我试着在听写理解中做这个操作:

1
2
3
4
5
6
7
for x in l:
    if (x[0] not in d):
        d[x[0]] = 0
    else:
        d[x[0]] += 1

# Out: {'Brasil': 1, 'Italia': 0}

但是当我尝试的时候:

1
2
3
d = {k: (0 if (k not in d) else (d[k]+1)) for k in [x[0] for x in l]}

# Out: {'Brasil': 0, 'Italia': 0}

我做错什么了?


更好的方法是使用来自collections模块的Counter

1
2
3
4
5
6
7
8
9
10
11
12
13
from collections import Counter

l = [
    ['Brasil', 'Italia', [10, 9]],
    ['Brasil', 'Espanha', [5, 7]],
    ['Italia', 'Espanha', [7,8]],
    ]

c = Counter([x[0] for x in l])
c.subtract({x[0]: 1 for x in l})

print(c)
# Counter({'Brasil': 1, 'Italia': 0})