2016-06-09 133 views
2

我有一个数组,如何在python3中创建字典?

months=['January','February','March','April','May','June','July','August','September','October','November','December'] 

,我希望把它作为字典一样

months = {1:'January', 2:'February',....} 

我试图enumerate()但没有任何运气。 如何将序列号分配给列表以制作字典? 在此先感谢!

回答

0

如果你想坚持枚举,你可以做这样的:

months =['January','February','March','April','May','June','July','August','September','October','November','December'] 

d_months = {} 

for i, month in enumerate(months): 
    d_months[i+1] = month 

print(d_months) 

输出:

{1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'} 

由于枚举从0开始,你需要使用[i+1]

+0

谢谢!它运作良好! – jaykodeveloper

2

试试这个。

months= 
['January','February','March','April','May','June','July','August','September','October','November','December'] 

dict = {i+1:months[i] for i in range(12)} 

正如评论中指出的那样,使用范围(len(months))。由于列表的长度在这种情况下是已知的,我用12

+1

应该n硬编码数组大小 - 使用'len(月)' –

+0

@IvanNevostruev是。应该提到这一点。由于我们在这种情况下事先知道了这个长度,所以我没有看到需要。将编辑我的答案:) –

+0

@AbhirathMahipal我也使用'范围'。谢谢! – jaykodeveloper

2

尝试使用eumerate这样,迫使它开始与1

months =['January','February','March','April','May','June','July','August','September','October','November','December'] 
months = {i:m for i,m in enumerate(months,1)} 
print months 

会产生

{1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'} 
4

由于dict()构造直接从键值对建立一个字典,这也适用:

dict(enumerate(months, 1)) 

这里有一些测试,尽管这ISN”对您的使用情况非常重要:

timeit dict(enumerate(months, 1)) 
The slowest run took 10.34 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 1.37 µs per loop 

timeit {i:m for i,m in enumerate(months,1)} 
The slowest run took 7.77 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 1.28 µs per loop 

timeit {i+1:months[i] for i in range(12)} 
The slowest run took 5.42 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 1.89 µs per loop 
+0

感谢您分享比较。你写了那个代码吗? – jaykodeveloper