将列表元素映射到它们的位置(Python)

时间:2018-02-17 15:30:30

标签: python list dictionary

我有一个网址列表。 (我们可以假设列表中的给定URL不超过一次。)

我需要一种快速的方法来确定列表中的两个URL中的哪一个。

我想,我应该从URL创建dict到列表中的位置。

简单的方法(不用手动增加计数器来编写for循环)将列表中的元素映射到列表中的位置是什么?

我设想的最好的事情是:

order = {}
i = 0
for item in list:
    order[item] = i
    i += 1

现在检查url1之前是否url2,我检查order[url1] < order[url2]

这段代码可以缩短吗?

3 个答案:

答案 0 :(得分:3)

这会创建您的order

order = {k: v for v, k in enumerate(list)}

示例:

L = list('abc')

您的版本:

order1 = {}
i = 0
for item in L:
    order1[item] = i
    i += 1
print(order1)

我的版本:

order2 = {k: v for v, k in enumerate(L)}
print(order2)

输出:

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

最好不要将list用于变量名,因为它是内置的。

enumerate提供了一个迭代,为您提供列表中每次迭代的索引和值。

答案 1 :(得分:1)

如果您想知道特定项目对的首选项,可以使用列表中的index方法:

a = ['cat', 'dog', 'fish']

a.index('cat') < a.index('dog') # True
a.index('fish') < a.index('dog') # False

答案 2 :(得分:1)

网址列表:

urls = ['A', 'B', 'C', 'D']

指数清单:

index = range(len(urls))

创建字典:

order = dict(zip(urls, index))

测试:

print(order['A'] < order['B'])  # True

Demo