#python
Вопрос:
Поэтому я пытаюсь позволить своему коду распечатать количество раз, когда печатается буква (без пробелов), и вот мой код до сих пор:
def charHistogram(filename: str): g = list(filename) f = [] for x in g: f.append([x, (g.count(x)*' ')]) return f print(charHistogram(filename='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac sem lorem. Integer elementum ultrices purus, sit amet malesuada tortor pharetra ac. Vestibulum sapien nibh, dapibus nec bibendum sit amet, sodales id justo.'))
и вот мой вывод в соответствии с кодом:
[['L', ' '], ['o', ' '], ['r', ' '], ['e', ' '], ['m', ' '], [' ', ' '], ['i', ' '], ['p', ' '], ['s', ' '], ['u', ' '], ['m', ' '], [' ', ' '], ['d', ' '], ['o', ' '], ['l', ' '], ['o', ' '], ['r', ' '], [' ', ' '], ['s', ' '], ['i', ' '], ['t', ' '], [' ', ' '], ['a', ' '], ['m', ' '], ['e', ' '], ['t', ' '], [',', ' '], [' ', ' '], ['c', ' '], ['o', ' '], ['n', ' '], ['s', ' '], ['e', ' '], ['c', ' '], ['t', ' '], ['e', ' '], ['t', ' '], ['u', ' '], ['r', ' '], [' ', ' '], ['a', ' '], ['d', ' '], ['i', ' '], ['p', ' '], ['i', ' '], ['s', ' '], ['c', ' '], ['i', ' '], ['n', ' '], ['g', ' '], [' ', ' '], ['e', ' '], ['l', ' '], ['i', ' '], ['t', ' '], ['.', ' '], [' ', ' '], ['P', ' '], ['r', ' '], ['a', ' '], ['e', ' '], ['s', ' '], ['e', ' '], ['n', ' '], ['t', ' '], [' ', ' '], ['a', ' '], ['c', ' '], [' ', ' '], ['s', ' '], ['e', ' '], ['m', ' '], [' ', ' '], ['l', ' '], ['o', ' '], ['r', ' '], ['e', ' '], ['m', ' '], ['.', ' '], [' ', ' '], ['I', ' '], ['n', ' '], ['t', ' '], ['e', ' '], ['g', ' '], ['e', ' '], ['r', ' '], [' ', ' '], ['e', ' '], ['l', ' '], ['e', ' '], ['m', ' '], ['e', ' '], ['n', ' '], ['t', ' '], ['u', ' '], ['m', ' '], [' ', ' '], ['u', ' '], ['l', ' '], ['t', ' '], ['r', ' '], ['i', ' '], ['c', ' '], ['e', ' '], ['s', ' '], [' ', ' '], ['p', ' '], ['u', ' '], ['r', ' '], ['u', ' '], ['s', ' '], [',', ' '], [' ', ' '], ['s', ' '], ['i', ' '], ['t', ' '], [' ', ' '], ['a', ' '], ['m', ' '], ['e', ' '], ['t', ' '], [' ', ' '], ['m', ' '], ['a', ' '], ['l', ' '], ['e', ' '], ['s', ' '], ['u', ' '], ['a', ' '], ['d', ' '], ['a', ' '], [' ', ' '], ['t', ' '], ['o', ' '], ['r', ' '], ['t', ' '], ['o', ' '], ['r', ' '], [' ', ' '], ['p', ' '], ['h', ' '], ['a', ' '], ['r', ' '], ['e', ' '], ['t', ' '], ['r', ' '], ['a', ' '], [' ', ' '], ['a', ' '], ['c', ' '], ['.', ' '], [' ', ' '], ['V', ' '], ['e', ' '], ['s', ' '], ['t', ' '], ['i', ' '], ['b', ' '], ['u', ' '], ['l', ' '], ['u', ' '], ['m', ' '], [' ', ' '], ['s', ' '], ['a', ' '], ['p', ' '], ['i', ' '], ['e', ' '], ['n', ' '], [' ', ' '], ['n', ' '], ['i', ' '], ['b', ' '], ['h', ' '], [',', ' '], [' ', ' '], ['d', ' '], ['a', ' '], ['p', ' '], ['i', ' '], ['b', ' '], ['u', ' '], ['s', ' '], [' ', ' '], ['n', ' '], ['e', ' '], ['c', ' '], [' ', ' '], ['b', ' '], ['i', ' '], ['b', ' '], ['e', ' '], ['n', ' '], ['d', ' '], ['u', ' '], ['m', ' '], [' ', ' '], ['s', ' '], ['i', ' '], ['t', ' '], [' ', ' '], ['a', ' '], ['m', ' '], ['e', ' '], ['t', ' '], [',', ' '], [' ', ' '], ['s', ' '], ['o', ' '], ['d', ' '], ['a', ' '], ['l', ' '], ['e', ' '], ['s', ' '], [' ', ' '], ['i', ' '], ['d', ' '], [' ', ' '], ['j', ' '], ['u', ' '], ['s', ' '], ['t', ' '], ['o', ' '], ['.', ' ']]
но я хочу, чтобы все было так:
e t s i a m r u l n o c d p b g h j v
Что я должен изменить в своем коде?
Ответ №1:
Как насчет этого:
def armar_dict(filename: str): diccionario={} for letra in filename: if letra in diccionario: diccionario[letra]=diccionario[letra] 1 else: diccionario[letra]=1 return diccionario def order_dict (diccio): sorted_dict = {} sorted_keys = sorted(diccio, key=diccio.get) for w in sorted_keys: sorted_dict[w] = diccio[w] return sorted_dict def char_histogram(diccio): for k, v in diccio.items(): print (k ": " " "*v)
Надеюсь, тебе это понравится.
Комментарии:
1. спасибо вам за ваш ответ, но можете ли вы сделать это без использования ‘key=’?? так что, как будто я тоже это понимаю. Я новичок в этом, так что, тбх, я вроде как не знаю многих встроенных функций, так что да, есть ли способ сделать это без встроенной функции??
2. Вы можете использовать
char_histogram(char_histogram(armar_dict(texto)))
вместоchar_histogram(char_histogram(order_dict(armar_dict(texto))))
и вы не должны использовать ключ, но он не будет заказан
Ответ №2:
Этого можно достичь с помощью:
import string def charHistogram(filename: str): alpha = string.ascii_lowercase g = list(filename.lower()) chars = set(g) f = [] for char in chars: if char in alpha: f.append([char, (g.count(char)*' ')]) f.sort(key=lambda x: len(x[1]), reverse=True) return f result = charHistogram(filename='''Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac sem lorem. Integer elementum ultrices purus, sit amet malesuada tortor pharetra ac. Vestibulum sapien nibh, dapibus nec bibendum sit amet, sodales id justo.''') for char, bar in result: print(char, bar)
Что дает:
e t s a i r u m o n l c d p b h g j
Ответ №3:
Вы можете использовать:
replace_list = [(" ", ""), (".", ""), (",", "")] def charHistogram(filename: str): for old, new in replace_list: filename = filename.lower().replace(old, new) # replace unwanted characters g = list(filename) f = {} for x in g: if x in f: f[x] = " " else: f[x]= " " return sorted(f.items(), key=lambda x: x[1], reverse=True) # sort data = charHistogram(filename='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac sem lorem. Integer elementum ultrices purus, sit amet malesuada tortor pharetra ac. Vestibulum sapien nibh, dapibus nec bibendum sit amet, sodales id justo.') for key, value in data: print(key, value)
Это дает вам:
e t s i a r m u l o n p d c b g h v j
Комментарии:
1. это
if/else
можно заменить одной строкойf[x] = f.get(x, '') ' '
2. Правильно, это сделало бы его короче, но я не хотел вносить слишком много изменений, чтобы сделать его понятным.
Ответ №4:
Я думаю, что мой подход имеет меньшие черты 🙂 , хотя корка такая же
def charHistogram(filename: str): filename = str.lower(filename) occurences = {char: " " * filename.count(char) for char in filename if char.isalnum()} occurences = sorted(occurences.items(), key=lambda item: item[1], reverse=True) occurences = "n".join([f"{l} {c}" for l, c in occurences]) return occurences