0
ls1 = [['b', (1, 1)], ['b', (1, 2)], ['b', (1, 3)], ['c', (2, 1)], ['c', (2, 2)]]
ls2 = ['A', 'B']

from itertools import groupby

key = lambda x: x[1][0]
lens = [len(list(g)) for k, g in groupby(sorted(ls1, key=key), key=key)]
dct = dict(zip(ls2, lens))

私の出力は次のようになります

{'A': 3, 'B': 2}

コードの最後の行でdictを使用する代わりに、

d2 = defaultdict(list)

次に、d2で同じ出力を取得するにはどうすればよいですか?

4

1 に答える 1

1

これに defaultdict を使用してもあまりメリットが得られないと思いますが、collections.Counter を使用するバージョンを次に示します。

ls1 = [['b', (1, 1)], ['b', (1, 2)], ['b', (1, 3)], ['c', (2, 1)], ['c', (2, 2)]]
ls2 = ['A', 'B']

from collections import Counter

lens = Counter(x[1][0] for x in ls1)
d2 = dict((k, v[1]) for k, v in zip(ls2, sorted(lens.items())))

最後の行の少し短いが、より混乱を招く可能性がある別の方法:

d2 = dict(zip(ls2, zip(*sorted(lens.items()))[1]))
于 2012-07-31T16:53:18.840 に答える