[英]Python function to print a two-column table from a dictionary
我目前正在為碩士學習 Python,並且正在努力提高自己的能力,因為我需要知道如何在我未來的職業生涯中編碼。
我目前有一個函數可以從字典中構建一個表,無論鍵或值的字符有多長。
但是,我正在努力變得更好,並且我確信有一種更“Pythonic”的方式來編寫這個(即更簡單的方式)。 這正是我以我有限的知識能夠得出的結論。
def salaryTable(itemsDict):
lengthRight=max( [ len(k) for k,v in itemsDict.items() ] )
lengthLeft=max( [ len(str(v)) for k,v in itemsDict.items() ] )
print( "Major".ljust(lengthRight+7) + "Salary".rjust(lengthLeft+7) )
print( '-' * (lengthRight+lengthLeft+14) )
for k,v in itemsDict.items():
print( k.ljust(lengthRight+7,'.') + str(v).rjust(lengthLeft+7) )
這是我用來測試左右兩邊的兩個字典:
# what it produces when keys or values in the dictionary are longer than the parameter's # leftWidth and rightWidth
majors={'English Composition':45000,
'Mechanical Engineering with a concentration in Maritime Mechanics':75000,
'Applied Math with a concentration in Computer Science':80000}
# testing on a dictionary with a long value
majors2={'English Composition':45000,
'Mechanical Engineering':75000,
'Applied Math':"$100,000 thousand dollars per year USD"}
```
PEP8建議對變量和函數使用snake_case,而不是camelCase。
它應該是salary_table
、 length_right
和items_dict
。 此外,你真的需要_dict
中的items_dict
嗎?
lengthRight 是左列的寬度,這看起來很奇怪; 也許它與列的內容有關,但 width_left 對我來說看起來更好。
width_left = max( len(k) for k,v in items_dict.items() )
也可以工作,並且不會創建列表。
width_left = max( len(k) for k in items_dict )
您可以進一步使用max(map(len, itemsDict))
,但這對我來說已經足夠了。
width_right = max( len(str(v)) for _, v in items_dict.items() )
但最好是
width_right = max( len(str(v)) for v in items_dict.values() )
兩個長度都加了 7; 也許最好一次添加它並命名它?
MINIMAL_WIDTH = 7
width_left = max( len(k) for k in items_dict ) + MINIMAL_WIDTH
width_right = max( len(str(v)) for v in items_dict.values() ) + MINIMAL_WIDTH
print(f"{k:.<{length_right}}{v:>{length_right}}")
def salary_table(items):
MINIMAL_WIDTH = 7
width_left = MINIMAL_WIDTH + max( len(k) for k in items )
width_right = MINIMAL_WIDTH + max( len(str(v)) for v in items.values() )
print( f"{'Major':<{width_left}}{'Salary':>{width_right}}" )
print( '-' * (width_left + width_right) )
for k, v in items.items():
print( f"{k:.<{width_left}}{v:>{width_right}}" )
我對鍵和值的性質一無所知; 根據給定的值,最好將k
和v
重命名為name
和price
,將items
重命名為books
。
注意制表。 也許你最好使用它而不是發明輪子? 還有PrettyTable和texttable 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.