我有一本词典,键为“标题”,“作者”,“出版年”,其值是列表:
book_dict= {'Titles': ['Double Play', 'Slow Burn', 'Altman Code'], 'Authors': ['Brown, Dan', 'Hannah, Kristin', 'Neri, Penelope'],
'Publication Year': [2004, 2003, 2006]}
列表中每个条目的位置彼此对应,因此book_dict['Titles'][0]
和book_dict['Authors'][0]
是有关同一本书的信息。 (注意:这些是书籍和作者的真实名字,但实际上并不对应)
我想创建一个包含这样的字典的列表:
[{"Title":"Double Play","Author":"Brown, Dan", "Publication Year":2004},
{"Title":"Slow Burn","Author":"Hannah, Kristin", "Publication Year":2003},
{"Title":"Altman Code","Author":"Neri, Penelope'", "Publication Year":2006}]
到目前为止,我已经尝试过:
for i in range(30):
for k,v in book_dict.items():
print({k[i]:v[i]})
但是我得到了这个:
{"Title":"Double Play"}
{"Author":"Brown, Dan"}
{"Publication Year":2004}
{"Title":"Slow Burn"}
{"Author":"Hannah, Kristin"}
{"Publication Year":2003}
{"Title":"Altman Code"}
{"Author":"Neri, Penelope"}
{"Publication Year":2006}
加上一个IndexError: list index out of range
答案 0 :(得分:3)
您将不得不对原始字典的值使用zip
的某些变体:
>>> [{'Title': t, 'Author': a, 'Publication Year': y} for t, a, y in zip(book_dict['Titles'], book_dict['Authors'], book_dict['Publication Year'])]
[{'Title': 'Double Play', 'Author': 'Brown, Dan', 'Publication Year': 2004},
{'Title': 'Slow Burn', 'Author': 'Hannah, Kristin', 'Publication Year': 2003},
{'Title': 'Altman Code', 'Author': 'Neri, Penelope', 'P
ublication Year': 2006}]
您可能会使用一些实用程序使其更具可读性:
from operator import itemgetter
items = itemgetter('Titles', 'Authors', 'Publication Year')
[
{'Title': t, 'Author': a, 'Publication Year': y}
for t, a, y in zip(*items(book_dict))
]
# [{'Title': 'Double Play', 'Author': 'Brown, Dan', 'Publication Year': 2004},
# {'Title': 'Slow Burn', 'Author': 'Hannah, Kristin', 'Publication Year': 2003},
# {'Title': 'Altman Code', 'Author': 'Neri, Penelope', 'Publication Year': 2006}]
答案 1 :(得分:3)
一种无需对键进行硬编码的通用方法是,对dict的压缩值进行迭代,并用该zip值压缩dict键,以使用dict构造函数构建子字典:
[dict(zip(book_dict, t)) for t in zip(*book_dict.values())]
这将返回:
[{'Titles': 'Double Play', 'Authors': 'Brown, Dan', 'Publication Year': 2004},
{'Titles': 'Slow Burn', 'Authors': 'Hannah, Kristin', 'Publication Year': 2003},
{'Titles': 'Altman Code', 'Authors': 'Neri, Penelope', 'Publication Year': 2006}]
答案 2 :(得分:1)
尝试一下:
[{k : book_dict[k][j] for k in book_dict} for j in range(len(book_dict['Titles']))]
输出:
[{'Titles': 'Double Play', 'Authors': 'Brown, Dan', 'Publication Year': 2004}, {'Titles': 'Slow Burn', 'Authors': 'Hannah, Kristin', 'Publication Year': 2003}, {'Titles': 'Altman Code', 'Authors': 'Neri, Penelope', 'Publication Year': 2006}]
答案 3 :(得分:1)
您可以使用zip()
逐步访问多个列表,例如
result = []
for title, author, year in zip(book_dict['Titles'], book_dict['Authors'],
book_dict['Publication Year']):
result.append({'Title': title, 'Author': author, 'Year': year})
print result