将嵌套列表转换为字典

sli*_*sed -1 python dictionary nested-lists

我试图转换为字典的嵌套列表如下所示:

my_dict = {}
book_ratings = [["Ben"],["5", "0", "1", "4"], ["Sally"],["0", "7", "3", "3"]]
Run Code Online (Sandbox Code Playgroud)

我试图返回名称 ["Ben"], ["Sally"] 作为键和评级 ["5","0","1","4"], ["0","7" ,"3","3"] 作为值。

希望输出:

 {"Ben": ["5," "0", "1", "4"], "Sally": ["0", "7", "3", "3"]}
Run Code Online (Sandbox Code Playgroud)

sup*_*ain 7

简单的字典组合:

>>> it = iter(book_ratings)
>>> {k: next(it) for k, in it}
{'Ben': ['5', '0', '1', '4'], 'Sally': ['0', '7', '3', '3']}
Run Code Online (Sandbox Code Playgroud)

使用已接受答案的解决方案 ( f1and 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
Run Code Online (Sandbox Code Playgroud)

基准代码:

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()
Run Code Online (Sandbox Code Playgroud)