Я хочу получить словарь из доступного числового списка, разделенного на цифры и их количество в строке.
Мои входы:
num_list = list('181986336314')
Мне нужно получить такой словарь:
mydict = {1: 111, 2: None, 3: 333, 4: 4, 5: None, 6: 66, 7: None, 8: 88, 9: 9}
«Я получил выражение с числом», какое выражение вашего вопроса является неполным, обновил вопрос с правильными деталями.
Это: dict = {1: 111, 2: нет, 3: 333, 4: 4, 5: нет, 6: 66, 7: нет, 8: 88, 9: 9}
не используйте dict в качестве имени переменной
Счетчик подсчитывает количество раз появления символа. В вашем примере «1» появляется 3 раза, а не 111 раз, а ключ «1», а не 1, если, конечно, так как вы работаете со строкой, а не с целым числом. Однако теперь вы можете преобразовать ключи и значения в то, что хотите.
Наличие пустой строки вместо None для пропущенных цифр имело бы больше смысла. Таким образом, значения будут иметь согласованный тип.
В том-то и дело: 111 — это три единицы.






Один из способов сделать это - опубликовать результат вашего счетчика.
counter = Counter(num_list)
my_dict = {}
for i in range(1, 10):
if (str(i) in counter.keys()):
my_dict[i] = int(str(i) * counter[str(i)])
else:
my_dict[i] = None
print(my_dict)
> {1: 111, 2: None, 3: 333, 4: 4, 5: None, 6: 66, 7: None, 8: 88, 9: 9}
Вы можете сохранить строку цифр в виде строки и использовать понимание словаря:
from collections import Counter
s = '181986336314'
c = Counter(s)
d = {digit:digit*c[digit] for digit in '0123456789'}
Результирующий словарь:
{'0': '', '1': '111', '2': '', '3': '333', '4': '4', '5': '', '6': '66', '7': '', '8': '88', '9': '9'}
В этом подходе я использовал '' вместо None, поскольку таким образом значения имеют согласованный тип. Кроме того, все они имеют одно и то же значение: строка заданной длины, состоящая из заданной цифры.
Какой вывод вам нужен?