[英]Create a Dictionary from 2 Lists with Default Keys and the Values from the Lists
[英]Create dictionary from lists of keys and multiple values
我有兩個清單:
header = ["Name", "Age"]
detail = ["Joe", 22, "Dave", 43, "Herb", 32]
並希望創建一個像這樣的dictonaries列表:
[{"Name": "Joe", "Age": 22}, {"Name": "Dave", "Age": 32}, {"Name": "Herb", "Age": 32}]
這個方法zip部分地在那里,但只將第一組值添加到字典中:
>>> dict(zip(header, detail))
{'Age': 22, 'Name': 'Joe'}
如何輸出detail
列表中所有值的一個字典? 我找到了這個答案 ,但這取決於包含嵌套列表的detail
。
>>> detail = ["Joe", 22, "Dave", 43, "Herb", 32]
>>> d = dict(zip(detail[::2], detail[1::2]))
>>> d
{'Herb': 32, 'Dave': 43, 'Joe': 22}
對於您的新/編輯問題:
>>> d = [dict(zip(header, items)) for items in zip(detail[::2],detail[1::2])]
>>> d
[{'Age': 22, 'Name': 'Joe'}, {'Age': 43, 'Name': 'Dave'}, {'Age': 32, 'Name': 'H
erb'}]
這是獲得它的一種方法:
header = ["Name", "Age"]
detail = ["Joe", 22, "Dave", 43, "Herb", 32]
data_iter = iter(detail)
collated = []
while True:
next_data = zip(header, data_iter)
if not next_data:
break
collated.append(dict(next_data))
輸出是
[{'Age': 22, 'Name': 'Joe'},
{'Age': 43, 'Name': 'Dave'},
{'Age': 32, 'Name': 'Herb'}]
此版本的優點是,如果更改標題數,則無需更改代碼。
對於這樣的任務我更喜歡功能方法。
這是石斑魚的食譜 :
def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
通過使用它,我們可以通過2
組來推進detail
:
>>> groups = grouper(len(header),detail)
>>> list(groups)
[('Joe', 22), ('Dave', 43), ('Herb', 32)]
然后我們可以使用這個迭代器來根據需要創建字典:
>>> [dict(zip(header,group)) for group in groups]
[{'Age': 22, 'Name': 'Joe'}, {'Age': 43, 'Name': 'Dave'}, {'Age': 32, 'Name': 'Herb'}]
為了澄清, zip(header,group)
給出了:
>>> zip(["Name", "Age"],('Joe', 22))
[('Name', 'Joe'), ('Age', 22)]
並召喚dict
構造函數給出:
>>> dict([('Name', 'Joe'), ('Age', 22)])
{'Age': 22, 'Name': 'Joe'}
>>> header = ["Name", "Age"]
>>> detail = ["Joe", 22, "Dave", 43, "Herb", 32]
>>> [dict(zip(header,detail[i:i+2])) for i in range(0,len(detail),2)]
[{'Age': 22, 'Name': 'Joe'}, {'Age': 43, 'Name': 'Dave'}, {'Age': 32, 'Name': 'Herb'}]`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.