Можете ли вы отсортировать ключи словаря по алфавиту в переменную списка и печатать с определенным выводом?

1

То, что ниже дает мне, - это алфавитный список моих ключей и значений в правильном формате, но есть ли способ перебрать алфавитные клавиши и значения в переменную списка и распечатать список так, чтобы результат выглядел точно так же, как и вывод ниже? Я рассмотрел некоторые подобные вопросы; Я все еще не уверен, что sort() фактически создает переменную списка, которую можно манипулировать дальше по строке, если я захочу.

def readFile(fileName):
    fileIn = open(fileName, "r")
    letterFrequency = {}
    for line in fileIn:                             
        line = line.strip()
        for letter in line:
            if letter.isalpha() is True:         
                if letter not in letterFrequency:      
                    letterFrequency[letter.lower()] = 1
                else:                                  
                    letterFrequency[letter.lower()] += 1
            else:
                pass
fileIn.close()
return letterFrequency

def main():
    fileName = input("What is the name of the file? ")
    letterDict = readFile(fileName)      
    for letter in sorted(letterDict):
        print(letter, letterDict[letter])



main()

ВЫХОД НА ВЫШЕ:

a 102
b 11
c 31
d 58
e 165
f 27
g 2
h 80 
i 17
k 3
l 42
m 13
n 63
o 93
p 15
q 1
r 79
s 44
t 60
u 21
v 24
w 21
y 10
  • 0
    Вы можете сортировать предметы в letterDict . например, sorted(letterDict.items()) Таким образом, у вас есть список кортежей, отсортированных по алфавиту, и вы можете повторять результаты с for key, value in result: ...
  • 0
    Зачем вам нужен именно этот list ? Чего не хватает вашему нынешнему решению? Мне не ясно, какая у вас проблема, которая требует решения любого рода; Конечно, итерация sorted(d.items()) будет несколько более эффективной (немного хуже в памяти, лучше во время выполнения, и проще для чтения, если она распакована со значимыми именами), но в любом случае работает.
Показать ещё 1 комментарий
Теги:
python-3.x

2 ответа

1
d = {"a": 5, "n": 2, "z": 1, "c": 3, "b": 0}

t = tuple((k, d[k]) for k in sorted(d.keys()))
print(t)
# (('a', 5), ('b', 0), ('c', 3), ('n', 2), ('z', 1))

Обратите внимание, что здесь не требуется вызов tuple(); без него вы получите (более эффективный) генератор. Это там, в этом примере, чтобы было легко увидеть результат.

0

Я создал список, отсортировал список и распечатал из словаря, вытащив имена ключей из отсортированного списка. Теперь, в отношении эффективности, необходимости и т.д. --that выходит за рамки моих знаний.

Вот как я решил свой вопрос:

def readFile(fileName):
    fileIn = open(fileName, "r")
    letterFrequency = {}
    for line in fileIn:                                         
        line = line.strip()
        for letter in line:
            if letter.isalpha() == True:                        
                if letter.lower() not in letterFrequency:       
                    letterFrequency[letter.lower()] = 1
                else:                                          
                    letterFrequency[letter.lower()] += 1
            else:
                pass
    fileIn.close()
    return letterFrequency


def sortKeys(dictionary):
    listNew = list(dictionary)
    listNew.sort()
    return listNew


def main():
    fileName = input("What is the name of the file you are trying to process? ")
    letterDict = readFile(fileName)    
    listNew = sortKeys(letterDict)
    for key in listNew:
        print(key, letterDict[key])


main()
  • 0
    Ваша функция sortKeys , помимо того, что не поддерживает key и reverse аргументы, является точной копией того, как работает sorted (все, что нужно sorted , - это преобразовать ввод в новый list , вызвать .sort() для него с предоставленными аргументами, а затем вернуть вновь отсортированный list ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню