簡體   English   中英

如何在python中從帶有數字和字符串的列表中打印表格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM