[英]How can I convert a list of dict keyx:valuex to a list dict key:keyx, value:valuex?
所以我有一個這樣的列表:
[
{ '1234' : 'Sun'}
{ '353453' : 'Earth'}
...
]
我想將其轉換為
[
{ 'temp': '1234', 'planet' : 'Sun'}
{ 'temp': '353453', 'planet': 'Earth'}
...
]
轉換此 dict 列表的 Pythonic 方式是什么?
您可以使用嵌套列表/字典理解:
lst = [
{ '1234' : 'Sun'},
{ '353453' : 'Earth'}
]
out = [ { 'temp': k, 'planet': v } for l in lst for k, v in l.items() ]
# [{'temp': '1234', 'planet': 'Sun'}, {'temp': '353453', 'planet': 'Earth'}]
您不應該嘗試在一個襯里中執行此操作,因為它不可讀。 您應該為每個元素一一構造 output 列表。
稍后將閱讀您的代碼的人(這可能是您自己幾個月后)會感謝您。
你可以做類似的事情
a = [{'1234': 'Sun', "12": "mars"}]
output = []
for measurement in a:
output_list_of_dict = [{"temp": temp, "planet": planet} for temp, planet in measurement.items()]
output.extend(output_list_of_dict)
請注意,在每個循環中,結果是一個列表本身:一個字典可能包含多個溫度。 因此,我使用了合並列表的«extend»方法,而不是 append。
以明確且易讀的方式執行此操作符合 python 理念。
從這個意義上說,它是最 Pythonic 的。
在我的腦海中,我會寫如下內容:
>>> l = [{ '1234' : 'Sun'}, { '353453' : 'Earth'}]
>>> r = [{'temp':list(x.keys())[0], 'planet': x[list(x.keys())[0]]} for x in l if len(x) == 1]
核心問題是這僅適用於正確形成的輸入數據結構,並且輸入格式不能以任何方式保證這一點。 因此,輸入數據的事先驗證可能是有用的。
但是如果我不得不將這種東西放在生產代碼中,我肯定會避免使用@François-Dailloux 建議的oneliner,而是編寫下面的愚蠢而簡單的代碼,這也非常易讀並且可能更快:
l = [{ '1234' : 'Sun'}, { '353453' : 'Earth'}]
res = []
for d in l:
if len(d) == 1:
for k, v in d.items():
res.append('temp': k, 'planet': v)
如果 len 不符合預期,我當然也會提出一些異常以避免傳播損壞的輸入數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.