如何在python中从包含数字和字符串的列表打印表

如何在python中从包含数字和字符串的列表打印表,python,Python,我试图打印一个表,从我目前的代码,它只输出一个列表,但我不知道如何实现这一点 {'judy': 1, 'dean': 1, 'andrew': 2, 'sam': 4, 'fred': 2} 当输入为3时,我希望以这种格式输出列表: 4 sam 2 andrew fred 1 dean judy 或者,如果输入为2(所有领带也需要按字母顺序排列): 这是迄今为止我的代码,它只输出一个列表: x = input("Enter a number: ") with open('stream.tx

我试图打印一个表,从我目前的代码,它只输出一个列表,但我不知道如何实现这一点

{'judy': 1, 'dean': 1, 'andrew': 2, 'sam': 4, 'fred': 2}
当输入为3时,我希望以这种格式输出列表:

4 sam
2 andrew fred
1 dean judy
或者,如果输入为2(所有领带也需要按字母顺序排列):

这是迄今为止我的代码,它只输出一个列表:

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)

提前感谢,非常感谢您提供的所有帮助

这里有一个
集合。计数器
对象用于计算事物,因此您的第一个循环:

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()
按值顺序返回
(键,值)
,然后您可以使用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

有没有办法确保打印时不带括号?哪些括号?我得到(4,'sam')(2,'andrew fred')(1,'dean judy')啊,您使用的是Py2,您可以删除打印的括号,例如,
print k',.join(排序(map(name,g)))
或将
从_未来_导入打印_功能
放在程序顶部。在Py3中,
print()
是一个函数。有没有办法把我的程序转换成python 3?如何检查我使用的是哪个版本?(我正在mac上使用pycharm)
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