python - 将嵌套列表转换为字典
问题描述
我试图转换为字典的嵌套列表如下所示:
my_dict = {}
book_ratings = [["Ben"],["5", "0", "1", "4"], ["Sally"],["0", "7", "3", "3"]]
我试图返回名称 ["Ben"], ["Sally"] 作为键和评级 ["5","0","1","4"], ["0","7" ,"3","3"] 作为值。
希望输出:
{"Ben": ["5," "0", "1", "4"], "Sally": ["0", "7", "3", "3"]}
解决方案
简单的 dict comp:
>>> it = iter(book_ratings)
>>> {k: next(it) for k, in it}
{'Ben': ['5', '0', '1', '4'], 'Sally': ['0', '7', '3', '3']}
以已接受答案的解决方案 (f1
和f2
) 和我的 ( f3
) 为基准,三轮,数字是以秒为单位的时间,因此更低=更快:
2.31 f1
2.08 f2
1.39 f3
2.30 f1
2.03 f2
1.34 f3
2.30 f1
2.08 f2
1.31 f3
基准代码:
from timeit import repeat
book_ratings = []
for i in range(1000):
book_ratings += [["Ben" + str(i)],["5", "0", "1", "4"]]
def f1():
i = iter(book_ratings)
return dict((a[0], b) for a, b in zip(i, i))
def f2():
return dict((a, b) for (a,), b in zip(book_ratings[::2], book_ratings[1::2]))
def f3():
it = iter(book_ratings)
return {k: next(it) for k, in it}
for _ in range(3):
for f in f1, f2, f3:
t = min(repeat(f, number=10000))
print('%.2f' % t, f.__name__)
print()
推荐阅读
- python - Groovy 中的“切片”字符串与步骤
- angular - Angular 5:无法找到“SocketIOClient”
- c# - asp.net中的HtmlEditorExtender图像上传错误
- rdlc - RDLC - 根据行值对项目进行排序
- javascript - async 是否使其中的所有内容都异步?
- c# - 从 IEnumerator 检索原始类型
- python - 如何保存 Keras 回归模型?
- java - 在 Java 中连接重置后恢复流式传输 GZIP 文件
- bash - 如何递归应用命令
- svg - 在 Highcharts 中,如何在调整大小、重排、重绘、缩小时保持矩形这样的 SVG 元素与系列数据而不是像素相连?