Может ли кто-нибудь объяснить мне это и / или направить меня на правильный / питонный способ сделать это?
Python 2.7.
В конечном итоге, я пытаюсь перебрать счетчик слов D:
countsD = {"aa": None, "bb": None, "cc": None, "dd": None}
и для совпадения в соответствующем словаре d:
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45, 98), "dd": (1, 33)}
добавить количество элементов в качестве значения к соответствующему соответствующему ключу, чтобы, наконец, создать это число D
{"aa": 6, "bb": 3, "cc": 2, "dd": 2}
Если я сделаю это с вышеупомянутым
> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45, 98), "dd": (1, 33)}
> for key in d:
>> print(key)
>> print(len(d[key]))
Возвращено это то, что я хочу
aa
6
cc
2
dd
2
bb
3
ОДНАКО, если одно из значений для ключа содержит только 1 значение (вполне возможно), например (см. «Cc»):
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45), "dd": (1, 33)}
и затем запустить то же самое для цикла, я получаю сообщение об ошибке на ключ "cc":
aa
6
cc
Traceback (most recent call last):
File "<interactive input>", line 3, in <module>
TypeError: object of type 'int' has no len()
ОДНАКО снова, если я сделаю так, чтобы ключ "cc" имел пустое значение (), то все снова в порядке.
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> for key in d:
... print(key)
... print(len(d[key]))
...
aa
6
cc
0
dd
2
bb
3
И при вводе заголовка для этого поста я только что сослался на Подсчет количества значений в словаре для каждого ключа для ответа. Отлично, одна строка! Но опять же, для ключа только с одним значением это не удается. Это хорошо:
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> new_countsD = {k: len(v) for k,v in d.items()}
>>> new_countsD
{'aa': 6, 'bb': 3, 'cc': 0, 'dd': 2}
это не так, см. Ключ "cc"
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (111), "dd": (1, 33)}
>>> new_countsD = {k: len(v) for k,v in d.items()}
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "<interactive input>", line 1, in <dictcomp>
TypeError: object of type 'int' has no len()
Итак, что дает ?? Я чувствую, что упускаю что-то глупое ...
Спасибо за любую помощь!