編輯:澄清這個問題有點串接在python字典中使用的項目列表理解
我怎麼能在一個相對快速的方式獲得一個字符串從字典與格式
key1 = value1
key2 = value2
? (相對於普通串聯)
編輯:澄清這個問題有點串接在python字典中使用的項目列表理解
我怎麼能在一個相對快速的方式獲得一個字符串從字典與格式
key1 = value1
key2 = value2
? (相對於普通串聯)
沒有理由在這裏使用列表理解。
Python 3.x都有:
for k,v in mydict.items():
print(k, '=', v)
的Python 2.x的:
for k,v in mydict.iteritems():
print k, '=', v
,因爲在另一個答案由OP評論編輯:
如果你傳遞到一個函數,而不是在這裏打印它,那麼你應該只傳遞生成器到函數或字典本身,讓函數處理它需要做的任何事情h it。
這比將它轉換爲不需要的範圍內的字符串要好得多。該功能應該這樣做,因爲這就是它的用處。
我做了一個包裝函數,因爲編輯主函數是不成問題的。
def log_wrap(mydict):
mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()])
write_to_log(mydict)
log_wrap(mydict)
像這樣:
DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
明確優於隱式
列表理解是一個way to create list,而不是爲了避免環路。
從PEP 202:
列表解析提供了更簡潔 方式 情況來創建列表,其中圖()和過濾器() 和/或嵌套的循環將被當前 使用。
所以你應該問自己:
什麼時候在Python中創建這個代碼有用?它可能更緊湊,但代碼被讀取的次數比寫入次數多,所以它的優點是什麼?
Tor Valamo的解決方案雖然沒有在原始請求中提出要求,但在我看來,它更具可讀性,因此因此應該是首選。問題更新
str.join
後
編輯是實現從列表中快速拼接的好辦法 - 和回覆來自納迪亞和Ritchie是如何使用它的好例子。
再次,我會而不是在一行中執行所有的事情,但我會分裂它在各個步驟,以強調可讀性。
我稍微編輯後就取消了我的回答。起初我把它作爲一個tupled列表,所以這是錯誤的。 – 2009-12-15 23:05:27
我想要這個方法,因爲我想將完整的字符串傳遞給一個函數。在直接循環的情況下,我不得不連接它或使用stringIO函數。我需要這麼做很多次 – randomThought 2009-12-15 23:18:54
你的問題是「我怎樣才能打印出格式化的字典......」這就是我們所回答的。如果你需要它來做其他事情,那麼你應該解釋這種情況,因爲也可能有其他優化。 – 2009-12-15 23:25:28
我更喜歡Python的方式:
mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
print key, '=', value
mydict.iteritems()對於巨大的字典會更好 – 2009-12-16 10:52:14
我看不出有任何的命名空間在這裏。你的意思是「範圍」? – 2009-12-15 23:35:02
我傳遞給它的函數來自我無法更改的日誌記錄模塊。 – randomThought 2009-12-15 23:45:22
@Pavel - 是的,我做到了。 :P @Jaelebi - 那麼你幾次將相同的字符串傳遞給同一個日誌記錄函數?爲什麼? – 2009-12-15 23:48:15