DEV Community

Cover image for Dictionary als tabel printen (Dutch)
compilerboiler
compilerboiler

Posted on

Dictionary als tabel printen (Dutch)

In Python kunt u gemakkelijk geformatteerde strings gebruiken om variabelen te weergeven.

Met geformatteerde strings (f-strings) kun je variabelen in een string opnemen door de string te voorzien van het voorvoegsel f of F en expressies te schrijven als {expressie}.

Als je een f-string hebt, kun je de :10 gebruiken om er zeker van te zijn dat deze 10 karakters breed is. Zo kun je een dictionary als tabel weergeven.

Als u nieuw bent met Python programmeren, moet u eerst de basis leren.

Formatteer dictionary als tabel met f-strings

Als u een nieuwere versie van Python heeft (>3.5) kunt u gebruik maken van f-strings. Hiermee kunt u de strings eenvoudig weergeven.

Eerst definiëren we een dictionary, dan itereren we erover met een for-loop en formatteren we het met f-strings.

>>> table = { "Alice": 12, "Jim": 15, "Tim": 19 }
>>> for name, id in table.items():
...     print(f'{name:10} => {id:10d}')
... 
Alice      =>         12
Jim        =>         15
Tim        =>         19
>>> 

Als u een header wilt toevoegen, roept dan eerst de print functie op, met als parameter de header tekst.

d = { "Alice": 128, "Bob": 256, "Tim": 512, "Jim": 1024 }
print(f"Key{' ':14} Value{' ':15}")
for k, v in d.items():
    print(f"{k:8}{v:15}")

Dit geeft het volgende resultaat

Key   Value               
Alice 128
Bob   256
Tim   512
Jim   1024

Bestaande functies

Je kunt ook een bestaande functie gebruiken, zoals deze die ik op het web heb gevonden. Persoonlijk geef ik de voorkeur aan het formatteren met f-strings, maar dit is misschien wat je zoekt.

def printTable(myDict, colList=None):
    if not colList: 
        colList = list(myDict[0].keys() if myDict else [])
    myList = [colList] # 1st row = header
    for item in myDict: 
        myList.append([str(item[col] or '') for col in colList])
    #maximun size of the col for each element
    colSize = [max(map(len,col)) for col in zip(*myList)]
    #insert seperating line before every line, and extra one for ending. 
    for i in  range(0, len(myList)+1)[::-1]:
         myList.insert(i, ['-' * i for i in colSize])
    #two format for each content line and each seperating line
    formatStr = ' | '.join(["{{:<{}}}".format(i) for i in colSize])
    formatSep = '-+-'.join(["{{:<{}}}".format(i) for i in colSize])
    for item in myList: 
        if item[0][0] == '-':
            print(formatSep.format(*item))
        else:
            print(formatStr.format(*item))

d = { "Alice": 128, "Bob": 256, "Tim": 512, "Jim": 1024 }
printTable([d])

Deze geeft de tabel weer in ascii art:

------+-----+-----+-----
Alice | Bob | Tim | Jim
------+-----+-----+-----
128   | 256 | 512 | 1024
------+-----+-----+-----

Gerelateerde links:

Oldest comments (0)