[英]How to print a table from a list with numbers and strings in python
我正在嘗試從當前代碼中打印一張表格,該表格到目前為止只輸出一個列表,但是我不確定如何實現這一點。
{'judy': 1, 'dean': 1, 'andrew': 2, 'sam': 4, 'fred': 2}
當輸入為3時,我想以這種格式輸出列表:
4 sam
2 andrew fred
1 dean judy
或者如果輸入為2,則類似這樣(所有聯系也需要按字母順序排列):
4 sam
2 andrew fred
到目前為止,這是我的代碼,僅輸出一個列表:
x = input("Enter a number: ")
with open('stream.txt','r') as f:
tweetlist = [r.split()[0] for r in f if "DM" not in r and "RT" not
in r]
tweet_counter = {}
for tweet in tweetlist:
if tweet in tweet_counter:
tweet_counter[tweet] += 1
else:
tweet_counter[tweet] = 1
popular_users = sorted(tweet_counter, key = tweet_counter.get, reverse
= True)
top = popular_users[:x]
top.sort()
print(tweet_counter)
預先感謝,非常感謝所有幫助
有一個collections.Counter
對象對事物進行計數,因此您的第一個循環是:
tweet_counter = {}
for tweet in tweetlist:
if tweet in tweet_counter:
tweet_counter[tweet] += 1
else:
tweet_counter[tweet] = 1
可以替換為:
from collections import Counter
tweet_counter = Counter(tweetlist)
Counter.most_common()
按值順序返回(key, value)
,然后可以使用python強大的迭代器代數( itertools
)獲得所需的結果。 首先使用itertools.groupby()
將值分組在一起,然后使用itertools.islice()
獲得所需的數字,例如:
import itertools as it
import operator as op
def print_table(tc, n):
name, value = op.itemgetter(0), op.itemgetter(1)
for k, g in it.islice(it.groupby(tc.most_common(), value), n):
print(k, ' '.join(sorted(map(name, g))))
In []:
print_table(tweet_counter, 2)
Out[]:
4 sam
2 andrew fred
In []:
print_table(tweet_counter, 3)
Out[]:
4 sam
2 andrew fred
1 dean judy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.