簡體   English   中英

將列表字典轉換為字典列表

[英]Convert a dictionary of lists into a list of dictionaries

我有以下字典對象:

Input = {'userName': ['psrr_api@auto-grid.com', 'ps_api1@auto-grid.com'],
         'password': ['Everseeource2016!', 'Eversource2016!']}

這將導致這個特定的輸出:

output = [{'UserName':'ps_api@auto-grid.com','password': 'Eversource2016!'},
          {'userName':'ps_api1@auto-grid.com','password':'Eversource2016!'}]

我不確定我將如何解決這個問題,任何幫助將不勝感激。

使用zip同時迭代兩個列表。 使用dict constructor創建單獨的字典,在list comprehension中自動處理循環。

Input = {'userName': ['psrr_api@auto-grid.com', 'ps_api1@auto-grid.com'], 'password': ['Everseeource2016!', 'Eversource2016!']}

Output = [ {'UserName':u, 'password':p} for u,p in zip(Input['userName'], Input['password']) ]

在許多 NoSQL 引擎中,數據通常以嵌套方式存儲,對於您的情況,它將是:

{'ID_1':
    {
    'username':'psrr_api@auto-grid.com',
    'password': 'Everseeource2016'
    },
'ID_2':{
    'username':'ps_api1@auto-grid.com',
    'password': 'Eversource2016!'
    }
}

這提供了一種通過 ID 訪問數據的有效方法

更多例子

這是轉換格式的代碼:此代碼是通用的 - 意味着您不必指定密鑰,在這種情況下: usernamepassword

from collections import defaultdict
data = defaultdict(dict)
for idx in range(len(Input.values()[0])):
    for key in Input.keys():
        data['ID_'+str(idx)].update({key: Input[key][idx]})
print data

如果您碰巧需要可變數量的鍵,您可以概括為:

代碼:

keys = [(k,) * len(data[k]) for k in data.keys()]
data_vals = [data[k] for k in data.keys()]
output = [dict(kv) for kv in
          (zip(*pairs) for pairs in zip(zip(*keys), zip(*data_vals)))]

測試代碼:

data = {'userName': ['psrr_api@auto-grid.com', 'ps_api1@auto-grid.com'],
         'password': ['Everseeource2016!', 'Eversource2016!']}

for i in output:
    print(i)

輸出:

{'userName': 'psrr_api@auto-grid.com', 'password': 'Everseeource2016!'}
{'userName': 'ps_api1@auto-grid.com', 'password': 'Eversource2016!'}

暫無
暫無

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

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