Python:如何创建一个字典,以列表索引号作为键,列表元素作为值?

4

我看到的所有问题都是与我想要做的完全相反:

假设我有一个列表:

lst = ['a','b','c']

我想制作一个字典,其中键是元素编号(从1开始而不是0),列表元素是值。就像这样:

{1:'a', 2:'b', 3:'c'}

但对于一个很长的列表,我稍微了解了一下enumerate(),但我看到的所有内容都是使用列表元素作为键。

我找到了这个:

dict = {tuple(key): idx for idx, key in enumerate(lst)}

但这会产生以下结果:
{'a':1, 'b':2, 'c':3}

...这恰恰是我不想要的,而且还采用了一种对Python新手来说很困惑的奇怪符号。

非常感谢您的建议!谢谢!


请参考这个答案:https://dev59.com/rG455IYBdhLWcg3wCPjh#4576128 - Brett Jeffreson
2
“奇怪的符号”被称为字典推导式。推导式非常方便,你会经常看到它们。这是一个不错的阅读起点:https://www.smallsurething.com/list-dict-and-set-comprehensions-by-example/ - Patrick Haugh
@PatrickHaugh 那么字典推导式是必要的来完成某些事情还是只是更加简洁?也就是说,那些东西能否像普通的for循环一样编写?如果这个问题有意义的话。 - q-compute
2
@hexaneandheels 不,你总是可以将理解展开成“for”循环。这是为了简洁和清晰。这里有一个文档,涉及其中的原理,并包含更多示例:https://www.python.org/dev/peps/pep-0274/#rationale - Patrick Haugh
4个回答

13

enumerate 带有 start 关键字参数,因此您可以从任何数字开始计数。 然后将其传递给 dict

dict(enumerate(lst, start=1))
你也可以使用字典推导式编写代码。
{index: x for index, x in enumerate(lst, start=1)}

第一种方法的时间复杂度是 O(n) 吗? - Mohamad Ghaith Alzin

1

默认情况下,枚举从0开始,但是您可以通过第二个参数start设置其值,如果您想从1而不是0开始,则可以将+1添加到每个迭代器中:

print({index+1:value for index,value in enumerate(lst)})

输出:

{1: 'a', 2: 'b', 3: 'c'}

上面的字典推导式与以下代码相同:
dict_1={}
for index,value in enumerate(lst):
    dict_1[index+1]=value
print(dict_1)

你可以使用enumeratestart参数来指定枚举应该从哪个数字开始,而不是每次加1。 - Arthur Khazbs

0

使用字典推导式和enumerate函数

print({x:y for x,y in enumerate(lst,1)})

{1: 'a', 2: 'b', 3: 'c'}

使用字典推导式、zip和range-

print({x:y for x,y in zip(range(1,len(lst)+1),lst)})

{1:'a',2:'b',3:'c'}


0

我认为下面的代码应该会有所帮助。

my_list = ['A', 'B', 'C', 'D']
my_index = []
my_dict = {}

for i in range(len(my_list)): 
    my_index.append(i+1)

for key in my_index: 
    for value in my_list: 
        my_dict[key] = value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接