web-dev-qa-db-ja.com

Pythonリストのdict値のアイテムをカウント

Python 3.3。この形式のキーと値のペアを持つ辞書。

d = {'T1': ['eggs', 'bacon', 'sausage']}

値は可変長のリストであり、リスト項目を反復処理する必要があります。これは機能します:

count = 0
for l in d.values():
   for i in l: count += 1

しかし、それは醜いです。もっとPython的な方法があるはずですが、私はそれを見つけることができないようです。

len(d.values()) 

1を生成します。これは1つのリスト(DUH)です。 here からCounterを使用して試行すると、「ハッシュできないタイプ」エラーが発生します。

13
RolfBly

sum()と各ディクショナリ値の長さを使用します。

_count = sum(len(v) for v in d.itervalues())
_

Python 3を使用している場合は、d.values()を使用してください。

入力サンプルと私の1つを使用したクイックデモ:

_>>> d = {'T1': ['eggs', 'bacon', 'sausage']}
>>> sum(len(v) for v in d.itervalues())
3
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(len(v) for v in d.itervalues())
7
_

Counterはここではあまり役に立ちません。エントリごとに数を作成するのではなく、すべての値の合計の長さを計算します。

41
Martijn Pieters
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
11
John La Rooy

Treehouseで宿題をしているときにこれを思いついた。 (私が知っているように)少なくとも1ステップは単純にすることができますが、初心者(私のように)がこのバージョンを理解する方が簡単かもしれません。

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']}

total = 0

for value in dict:
    value_list = dict[value]
    count = len(value_list)
    total += count

print(total)
0
Rik Schoonbeek

私がこのトピックを見つけたとき、これを使用するコードにすでに何かがあることに気づくまで、私はこれに対する答えを探していました。これは私が思いついたものです:

count = 0

for key, values in dictionary.items():
        count = len(values)

すべての辞書項目の数を保存したい場合は、新しい辞書を作成して、各キーの数を保存できます。

count = {}

for key, values in dictionary.items():
        count[key] = len(values)

このメソッドが利用可能なバージョンから正確に見つけることができませんでしたが、.itemsメソッドはPython 3。

0
Jeffrey