То, что ниже дает мне, - это алфавитный список моих ключей и значений в правильном формате, но есть ли способ перебрать алфавитные клавиши и значения в переменную списка и распечатать список так, чтобы результат выглядел точно так же, как и вывод ниже? Я рассмотрел некоторые подобные вопросы; Я все еще не уверен, что 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
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()
; без него вы получите (более эффективный) генератор. Это там, в этом примере, чтобы было легко увидеть результат.
Я создал список, отсортировал список и распечатал из словаря, вытащив имена ключей из отсортированного списка. Теперь, в отношении эффективности, необходимости и т.д. --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()
sortKeys
, помимо того, что не поддерживает key
и reverse
аргументы, является точной копией того, как работает sorted
(все, что нужно sorted
, - это преобразовать ввод в новый list
, вызвать .sort()
для него с предоставленными аргументами, а затем вернуть вновь отсортированный list
).
letterDict
. например,sorted(letterDict.items())
Таким образом, у вас есть список кортежей, отсортированных по алфавиту, и вы можете повторять результаты сfor key, value in result: ...
list
? Чего не хватает вашему нынешнему решению? Мне не ясно, какая у вас проблема, которая требует решения любого рода; Конечно, итерацияsorted(d.items())
будет несколько более эффективной (немного хуже в памяти, лучше во время выполнения, и проще для чтения, если она распакована со значимыми именами), но в любом случае работает.