list_nums = [1,18]
list_chars = ['a','d']
我想:
list_num_chars = [{'num':1, 'char':'a'},
{'num':18, 'char':'d'}]
是否有一個更優雅的解決方案比:
list_num_chars = [{'num':a, 'char':b} for a,b in zip(list_nums, list_chars)]
list_nums = [1,18]
list_chars = ['a','d']
我想:
list_num_chars = [{'num':1, 'char':'a'},
{'num':18, 'char':'d'}]
是否有一個更優雅的解決方案比:
list_num_chars = [{'num':a, 'char':b} for a,b in zip(list_nums, list_chars)]
如果最初的名單是很長期以來,您可能需要使用itertools.izip()
而不是zip()
來改善性能和減少內存使用量,但除此之外,我不能想到一個明顯「更好」的方式來做到這一點。
好的,謝謝! – ash 2011-03-06 01:47:20
map(dict, map(lambda t:zip(('num','char'),t), zip(list_nums,list_chars)))
給出:
[{'char': 'a', 'num': 1}, {'char': 'd', 'num': 18}]
聲明一個新的變量,它的關鍵是你的字典
from itertools import izip
nums = [1,18]
chars = ['a','d']
keys = ["num", "char"] # include list of keys as an input
賦予一個稍微更優雅的解決方案,我想。
[dict(zip(keys,row)) for row in izip(nums,chars)]
當有多個鍵(這就是爲什麼我開始打獵擺在首位:)
如果你想要這個解決方案,這樣的修改給出了同樣作爲發電機這絕對是更優雅:
(dict(zip(keys,row)) for row in izip(nums,chars))
您的解決方案已經很優雅,因爲它是Pythonic,易於閱讀和類似於輸出。我不確定你還可以要求什麼:p – Kai 2011-03-06 01:23:16
你的意思是你想擁有一種「宏」,可以在任何這樣的列表上工作,而不必更改名稱;例如,如果您將它傳遞給「list_foo」,它將使用密鑰「foo」? – Vamana 2011-03-06 01:34:39
@Vamana:不,不是那樣的。 – ash 2011-03-06 01:46:47