2017-10-07 11 views
0

私は持っている結果のリストを印刷しようとしていますが、整列させたいのです。私は、彼らがこの奇妙なジグザグ形で進んでいないので、周波数が互いに整列させたい整列して印刷するのに問題があります

 table   
word:   frequency: 
i     9 
my     2 
to     2 
test     2 
it     2 
hate     1 
stupid     1 
accounting     1 
class     1 
because     1 
its     1 
from     1 
six     1 
seven     1 
pm     1 
how     1 
is     1 
this     1 
helping     1 
becuase     1 
im     1 
going     1 
do     1 
a     1 
little     1 
on     1 
freind     1 
ii     1 

:彼らは、現在のように見えます。私はフォーマットに物を追加することで遊んでみましたが、うまくいきませんでした。これは私のコードがどのように見えるかです:

import string 
from collections import OrderedDict 


f=open('mariah.txt','r') 
a=f.read() # read the text file like it would normal look ie no \n or anything 
# print(a) 
c=a.lower() # convert everything in the textfile to lowercase 
# print(c) 
y=c.translate(str.maketrans('','',string.punctuation)) # get rid of any punctuation 
# print(y) 
words_in_novel=y.split() # splitting every word apart. the default for split is on white-space characters. Why when i split like " " for the spacing is it then giving me \n? 

#print(words_in_novel) 

count={} 

for word in words_in_novel: 
    #print(word) 
    if word in count: # if the word from the word_in_novel is already in count then add a one to that counter 
     count[word]+=1 
    else: 
     count[word]=1 # if the word is the first time in count set it to 1 

print(count) 
print("\n\n\n\n\n\n\n") 
# this orderes the dictionary where its sorts them by the second term wehre t[1] refers to the term after the colon 
# reverse so we are sorting from greatest to least values 
g=(sorted(count.items(), key=lambda t: t[1], reverse=True)) 
# g=OrderedDict(sorted(count.items(), key=lambda t: t[1])) 
print(g) 
print("\n\n\n\n\n\n\n") 
print("{:^20}".format("table")) 
print("{}{:>20}".format("word:","frequency:")) 
for i in g: 
    # z=g[i] 
    # print(i) 
    # a=len(i[0]) 
    # print(a) 
    # c=50+a 
    # print(c) 
    print("{}{:>20}".format(i[0],i[1])) 

誰もがどのように直線になるように知っていますか?

+0

あなたが固定の持っている単語列を必要とする幅 –

答えて

2

第2列ではなく、第1列の幅と幅を調整する必要があります。
正しい方法:

... 
print("{:<20}{}".format("word:","frequency:")) 
for i in g: 
    print("{:<20}{}".format(i[0],i[1])) 

出力はのようになります。

word:    frequency: 
i     9 
my     2 
... 
accounting   2 
class    1 
because    1 
... 
+0

すごいありがとうございました!最初の1つの要素でそれを行うと、なぜ機能しますか? – Brit

+0

@Brit、大歓迎です。指定子 '{:<20} 'は、第1列の幅を20文字に静的に確保/拡張します。左側の値は – RomanPerekhrest

+0

です。これは、単語の終わりではなく行の先頭から始まります。 – Brit

0

[OK]を、あなたのコードの一部について:

for i in g: 
    r = " "*25 
    #print("{}{:>20}".format(i[0],i[1])) 
    r[:len(i[0])] = i[0] 
    r = r[:22]+str(i[1]) 
    print(r) 

それは

0

た場合に動作するはずですあなたは、頻度があなたが何かを試すことができる一桁よりも大きいことさえ発見するこのように:

max_len = max(len(i[0]) for i in g) 
format_str = "{{:<{}}}{{:>{}}}".format(max_len, 20 - max_len) 
for i in g: 
    print(format_str.format(i[0], i[1])) 
0

揃え言葉あまりに

print("{:<10}{:>10}".format(i[0],i[1])) 
関連する問題