簡體   English   中英

如何將 dict keyx:valuex 列表轉換為 dict key:keyx, value:valuex 列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM