Python подсчитывает элементы в значении dict, являющемся списком
Python 3.3, словарь с парами ключ-значение в этой форме.
d = {'T1': ['eggs', 'bacon', 'sausage']}
Значения представляют собой списки переменной длины, и мне нужно перебирать элементы списка. Это работает:
count = 0
for l in d.values():
for i in l: count += 1
Но это уродливо. Должен быть более путинский путь, но я не могу его найти.
len(d.values())
производит 1. Это 1 список (DUH). Попытки с Counter от здесь дают ошибки "нераспакованного типа".
Ответы
Ответ 1
Используйте 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
A Counter
не поможет вам здесь, вы не создаете счет за каждую запись, вы вычисляете общую длину всех ваших значений.
Ответ 2
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
Ответ 3
Я искал ответ на этот вопрос, когда нашел эту тему, пока не понял, что у меня уже есть что-то в моем коде, чтобы использовать это. Вот что я придумал:
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.
Ответ 4
Выполняя свою домашнюю работу в Treehouse, я придумал это. Его можно упростить на один шаг (что я знаю), но новичкам (как и я), возможно, будет легче понять эту версию.
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)