簡體   English   中英

如何在 Python 中減少字典到字典的轉換列表

[英]How to reduce convert list of Dict to Dict in Python

我需要以以下格式轉換 dict 列表。

[{"key":"eff_date","value":"20202020"},{"key":"member_id","value":"33sasfafXCC"},{"key":"exp_date","value":"20992020"}]

變成這種格式:

{"eff_date":"20202020","member_id":"33sasfafXCC","exp_date":"20992020"}

我嘗試使用以下減少功能,但無法完全理解。

payload = [{"key":"eff_date","value":"20202020"},{"key":"member_id","value":"33sasfafXCC"},{"key":"exp_date","value":"20992020"}]    
list = []
    def keys(x,y):
     return list.append({y['key'] : y['value']})

result = reduce(keys, payload,None)

你真的不需要reduce 你沒有reduce任何東西。

嘗試一個簡單的字典理解:

result = {p["key"]:p["value"] for p in payload}

>>> result
{'eff_date': '20202020', 'member_id': '33sasfafXCC', 'exp_date': '20992020'}

你可以編輯你的函數看起來像這樣:

payload = [{"key":"eff_date","value":"20202020"},{"key":"member_id","value":"33sasfafXCC"},{"key":"exp_date","value":"20992020"}]    

def change(list):
  newDict = {}
  for dict in payload:
    newDict[dict["key"]] = dict["value"]
  return newDict

result = change(payload)
print(result)

輸出:

{'eff_date': '20202020', 'member_id': '33sasfafXCC', 'exp_date': '20992020'}

這將接收一個字典列表,遍歷每個字典,將鍵值對添加到新字典中,然后返回該字典。

正如@not_speshal 提到的,您不需要內置的reduce函數。

請注意,您可以使用functools.reduce來執行此操作,盡管您確實應該只使用字典理解,但一種有效的解決方案是:

>>> from functools import reduce
>>> data = [{"key":"eff_date","value":"20202020"},{"key":"member_id","value":"33sasfafXCC"},{"key":"exp_date","value":"20992020"}]
>>> def reducer(acc, x):
...     acc[x['key']] = x['value']
...     return acc
...
>>> reduce(reducer, data, {})
{'eff_date': '20202020', 'member_id': '33sasfafXCC', 'exp_date': '20992020'}

這並不漂亮 - 它依賴於副作用。 如果您要依賴副作用,也可能只是一個 for 循環。

一種更“有原則”的方式,不依賴於使用新的 pip-update 運算符的副作用| 將會:

>>> def reducer(acc, x):
...     return acc | {x['key']:x['value']}
...
>>> reduce(reducer, data, {})
{'eff_date': '20202020', 'member_id': '33sasfafXCC', 'exp_date': '20992020'}

但這會不必要地低效,並且擴展性很差。

所以總而言之,在 Python 中最自然的方法就是:

result = {x['key']: x['value'] for x in data}

甚至只是 for 循環形式:

result = {}
for x in data:
    result[x['key']] = x['value']

最好是基於reduce的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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