18

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

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

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

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

しかし、それは醜いです。もっと Pythonic な方法があるはずですが、見つけられないようです。

len(d.values()) 

1を生成します。これは1つのリストです(DUH)。ここから Counter を使用しようとすると、'unhashable type' エラーが発生します。

4

5 に答える 5

49

各ディクショナリ値の使用sum()と長さ:

count = sum(len(v) for v in d.itervalues())

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

あなたの入力サンプルと私のものを使った簡単なデモ:

>>> 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ではあまり役に立ちません。エントリごとにカウントを作成するのではなく、すべての値の合計の長さを計算しています。

于 2013-05-31T19:57:30.120 に答える
16
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
于 2013-05-31T20:01:18.680 に答える
0

私にとって最も簡単な方法は次のとおりです。

winners = {1931: ['Norman Taurog'], 1932: ['Frank Borzage'], 1933: ['Frank Lloyd'], 1934: ['Frank Capra']}

win_count_dict = {}

for k,v in winners.items():
    for winner in v:
        if winner not in win_count_dict:
            win_count_dict[winner]=1
        else:
            win_count_dict[winner]+=1


print("win_count_dict = {}".format(win_count_dict))
于 2020-12-16T07:06:23.640 に答える
-1

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

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 でのみ利用できると思います。

于 2016-12-30T09:56:02.200 に答える