如何在终端中动态打印字符串表?

时间:2012-08-22 17:58:10

标签: python dynamic terminal formatting tabular

我需要动态创建一个dicts的dict,然后将它们打印在终端的整洁表中。最终,我将添加到每个字典并重新打印表格。

到目前为止,这是我的代码:

def handy(self, play_deck):
    a = raw_input('How many hands? ')
    for i in range(int(a)):
        h = "hand" + str(i+ 1) # dynamilly create key
        q, play_deck = self.deal(self.full_deck) # pull cards from deck
        self.dict_of_hands.setdefault(h, q) # load up dict of hands

    hand_keys = self.dict_of_hands.keys()
    the_hands = self.dict_of_hands
    print "\n"
    for hand in hand_keys:
        for card in range(len(the_hands[hand].keys())):
            print hand
            print the_hands[hand][card]

我的输出是这样的:

How many hands? 4

hand4
6 of Clubs
hand4
4 of Diamonds
hand1
8 of Diamonds
hand1
10 of Hearts
hand2
10 of Hearts
hand2
5 of Clubs
hand3
9 of Diamonds
hand3
3 of Hearts

我想:

hand1           hand2           hand3            hand4
2 of hearts     8 of spades     ace of clubs     jack of diomonds
5 of diamonds   ...             ...              ...etc.

我在SO上看到的示例基于已知数量的列。这需要是动态的。

3 个答案:

答案 0 :(得分:1)

要转换为行列表,请使用zip

header = dict_of_hands.keys()
rows = zip(*dict_of_hands.items())

import texttable
table = texttable.Texttable()
table.header(header)
table.add_rows(rows, header=False)
print table.draw()

答案 1 :(得分:1)

行。拿@ecatmur提供的内容,我现在有以下内容,现在似乎有效。

def handy(self, play_deck):
    a = raw_input('How many hands? ')
    for i in range(int(a)):
        h = "hand" + str(i+ 1) # dynamilly create key
        q, play_deck = self.deal(self.full_deck) # pull cards from deck
        self.dict_of_hands.setdefault(h, q) # load up dict of hands

    hand_keys = self.dict_of_hands.keys()
    the_hands = self.dict_of_hands

    first_cards = []
    second_cards = []
    for hand in the_hands:
        # print the_hands[hand][0]
        first_cards.append(the_hands[hand][0])

    for hand in the_hands:
        # print the_hands[hand][1]
        second_cards.append(the_hands[hand][1])         

    header = self.dict_of_hands.keys()


    table = texttable.Texttable()
    table.header(header)
    table.add_rows([first_cards, second_cards], header=False)
    print table.draw()

和输出是:

How many hands? 4
+---------------+---------------+------------------+---------------+
|     hand4     |     hand1     |      hand2       |     hand3     |
+===============+===============+==================+===============+
| Jack of Clubs | 9 of Diamonds | Jack of Diamonds | 4 of Spades   |
+---------------+---------------+------------------+---------------+
| 6 of Diamonds | 10 of Spades  | 9 of Diamonds    | Ace of Hearts |
+---------------+---------------+------------------+---------------+

拼图的最后一部分将使以下线动态化:

table.add_rows([first_cards, second_cards], header=False)

最终,我需要每只手都有不同的长度。

答案 2 :(得分:0)

看看这个食谱:Render tables for text interface