为了账号安全,请及时绑定邮箱和手机立即绑定

将python字典转换为python列表

将python字典转换为python列表

MM们 2021-05-02 16:19:27
dictionary = {0:0.2, 9:0.4}pylist = [0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0.4]将字典转换为pylist的有效方法是哪一种?字典中的键构成列表中的索引,并且字典中的各个值成为列表中的值。字典中的键范围介于0到9之间(含0和9)。列表的长度将是固定的,即10。pytuple = [ (0, 0.2), (9,0.4)]pylist = [0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0.4]或者,哪种是将pytuple转换为pylist的有效方法?元组中的第一个元素形成列表中的索引,元组中的相应第二个值成为列表中的值。字典中的键范围介于0到9之间(含0和9)。列表的长度将是固定的,即10。
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我做了一些将字典转换为pylist的测量,结果如下:


from timeit import timeit    


dictionary = {0:0.2, 9:0.4}


def method1(d, n=10):

    return [d[i] if i in d.keys() else 0 for i in range(n)]



def method2(d, n=10):

    return [d.get(i, 0) for i in range(n)]



def method3(d, n=10):

    return [d.get(i, v) for i, v in enumerate([0] * n)]



def method4(d, n=10):

    l = [0] * n

    for v, k in dictionary.items():

        l[v] = k

    return l


print(timeit("method1(dictionary)", globals=globals(), number=1_000_000))

print(timeit("method2(dictionary)", globals=globals(), number=1_000_000))

print(timeit("method3(dictionary)", globals=globals(), number=1_000_000))

print(timeit("method4(dictionary)", globals=globals(), number=1_000_000))

输出为:


1.8713272300001336

1.8894721449996723

2.15010558800077

0.5128111490002993

很明显,这method4是最快的-首先创建固定的零列表,然后仅迭代需要更改的键。


基于这一事实,将元组转换为列表应遵循类似的模式:创建固定列表,然后遍历pytuple并更改该列表中的值。


编辑:


我也对随机词典做了一些测试:


# creating random dictionary

n = random.randint(1000, 100000)

idx = list(range(n))

dictionary = {}

for i in range(random.randint(100, n)):

    dictionary[random.choice(idx)] = random.random()


print('n =',n)

print('len(dictionary.keys() =', len(dictionary.keys()))


print(timeit(f"method1(dictionary, n={n})", globals=globals(), number=100))

print(timeit(f"method2(dictionary, n={n})", globals=globals(), number=100))

print(timeit(f"method3(dictionary, n={n})", globals=globals(), number=100))

print(timeit(f"method4(dictionary, n={n})", globals=globals(), number=100))

结果:


n = 82981

len(dictionary.keys() = 32083

1.203233296999315

1.1194271739987016

1.3668270919988572

0.2243523440010904


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号