2017-01-10 98 views
0

我有一本字典,如:Python的方式字典其項目轉換爲字符串

a = { "Linux": "Linus Torvalds", 
     "Microsoft": "Bill Gates", 
     "Apple": "Steve Jobs"} 

我想字符串化這個字典是這樣的:

Linux : Linus Torvalds 
Microsoft: Bill Gates 
Apple : Steve Jobs 

這樣做操作,我有以下代碼:

data = "" 
for product, lead in a.items(): 
    data += product + ": " + lead + "\n" 

此代碼產生以下結果:

print(data) 
Linux: Linus Torvalds 
Microsoft: Bill Gates 
Apple: Steve Jobs 

我想要更多的Pythonic方法來執行此操作,因爲我認爲我的代碼更多的是解決此問題的過程方法(初始化和操作)。此外,正確格式化data的任何提示都不會錯。

+1

爲什麼要在此處創建字符串以進行可視化?我無法想象這是一個好主意的案例 –

+0

@Chris_Rands是的。我想打印數據。 –

+0

只需迭代,然後在'a.items():print(k,v)'中輸入k,v或者你可以使用'pprint',但這可能是過量的 –

回答

4

如果你想獲得他們的格式就像你有

print('\n'.join(['{:<9}: {}'.format(k, v) for k, v in a.items()])) 

打印

Apple : Steve Jobs 
Linux : Linus Torvalds 
Microsoft: Bill Gates 
+2

你也可以使用星號格式: '.format(* pair)for a.items()'中的對。我喜歡這種方法更好地控制它允許的行格式。 –

+0

感謝您的解決方案和@Kounis的建議。 –

+0

@ Ev.Kounis顯式比隱式更好。它有助於記錄在這種情況下哪個是哪個。 –

3

您可以使用嵌套的str.join操作。

print('\n'.join(': '.join(item) for item in a.items())) 
# Linux: Linus Torvalds 
# Microsoft: Bill Gates 
# Apple: Steve Jobs 

這將創建一個包含': '分開鍵和值,然後用「\n」將它們連接在一起的發電機。

+0

感謝你的解決方案 –

1

首先轉換dict一個迭代與map,然後使用join加入的元素:

work_person = map(lambda x: x[0]+': '+x[1], a.items())  
res = '\n'.join(work_person) 
1

我會加上Patrick的回答檢查最長的密鑰長度以填充密鑰:

max_length = max(len(k) for k in a) 
print('\n'.join(['{:<{}}: {}'.format(k, max_length, v) for k, v in a.items()]))