2016-07-15 45 views
0

每个人。我对Python很陌生,急需一些帮助。我正在计算几个列表中的唯一值,然后将这些输出并列显示为列。我可以使用集合来对它们进行计数。但是,我不知道如何并排打印它们。有没有pythonic的方式来连接或并排显示它们为列?并列Python列表

我试了下面,但无济于事。任何帮助,非常感谢。

print(str(parsed_list(a)) + str(parsed_list(b)) + str(parsed_list(b))) 
NoneNoneNone 

我的样本测试的代码(Python3):

import collections, operator 

a = ['Black Cat', 'Black Dog', 'Black Mouse'] 
b = ['Bird', 'Bird', 'Parrot'] 
c = ['Eagle', 'Eagle', 'Eagle', 'Hawk'] 


def parsed_list(list): 
    y = collections.Counter(list) 
    for k, v in sorted(y.items(), key=operator.itemgetter(1), reverse=True): 
     z = (str(k).ljust(12, ' ') + (str(v))) 
     print(z) 

print('Column1   Column2    Column3') 
print('-' * 45) 
parsed_list(a) 
parsed_list(b) 
parsed_list(c) 

电流:

Column1   Column2    Column3 
--------------------------------------------- 
Black Cat 1 
Black Dog 1 
Black Mouse 1 
Bird  2 
Parrot  1 
Eagle  3 
Hawk  1 

所需的输出:

Column1   Column2  Column3 
---------------------------------------- 
Black Cat 1 Bird  2 Eagle 3 
Black Dog 1 Parrot 1 Hawk 1 
Black Mouse 1 
+0

你看着用熊猫来处理这样的表格数据? –

+0

@ cricket_007不幸的是,这个脚本正在一个我不能(不允许)安装熊猫的系统上执行。有没有一种原生的方式来做到这一点?看起来像是经常需要的东西。 – MBasith

回答

0

我肯定可以手动建立自己的图书馆,但Python似乎有一个格式方法d内置于字符串类型中,可以很好地满足您的需求。

这个link以前的帖子可以帮助你!试一试!

2

以在tabulate module的依赖:

import collections 
from itertools import zip_longest 
import operator 

from tabulate import tabulate 

def parsed_list(lst): 
    width = max(len(item) for item in lst) 
    return ['{key} {value}'.format(key=key.ljust(width), value=value) 
      for key, value in sorted(
       collections.Counter(lst).items(), 
       key=operator.itemgetter(1), reverse=True)] 

a = parsed_list(['Black Cat', 'Black Dog', 'Black Mouse']) 
b = parsed_list(['Bird', 'Bird', 'Parrot']) 
c = parsed_list(['Eagle', 'Eagle', 'Eagle', 'Hawk']) 

print(tabulate(zip_longest(a, b, c), headers=["Column 1", "Column 2", "Column 3"])) 

# Output: 
# Column 1  Column 2  Column 3 
# ------------- ------------- ------------- 
# Black Mouse 1 Bird  2 Eagle  3 
# Black Dog 1 Parrot  1 Hawk  1 
# Black Cat 1 
1
from collections import Counter 
from itertools import zip_longest 
a = ['Black Cat', 'Black Dog', 'Black Mouse'] 
b = ['Bird', 'Bird', 'Parrot'] 
c = ['Eagle', 'Eagle', 'Eagle', 'Hawk'] 

def parse(lst): 
    c = Counter(lst) 
    r = [] 
    for s, cnt in c.most_common(): 
     r += ['%12s%3i' % (s, cnt)] 
    return r 

for cols in zip_longest(parse(a), parse(b), parse(c), fillvalue=15*' '): 
    print(' '.join(cols)) 

这将产生:

Black Cat 1   Bird 2  Eagle 3 
Black Mouse 1  Parrot 1   Hawk 1 
    Black Dog 1