Python中有没有一种方法可以通过容器的元素来索引容器列表(元组、列表、字典)?

2024-09-27 22:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在寻找一个方法/示例来索引元组列表,而不需要修改decorate、sort和uncorate方法。在

例如:

l=[(a,b,c),(x,c,b),(z,c,b),(z,c,d),(a,d,d),(x,d,c) . . .]

我一直使用的方法是使用第二个元素的defaultdict构建一个字典

^{pr2}$

然后,我必须为列表中的每个项构建一个只包含元组中第二个项的列表。虽然有很多方法可以达到这个目标,但一个简单的方法是:

tempList=[myTuple[1] for myTuple in l]

然后在tdict中生成每个项目的索引

indexDict=defaultdict(dict)
for key in tdict:
    indexDict[key]['index']=tempList.index(key)

显然,这看起来不是很像Python。我一直在试图找到一些例子或见解,认为我应该能够使用一些神奇的东西来直接获得索引。到目前为止还没有这么幸运。在

注意,我知道我可以采取更直接的方法,而不是生成tdict。在

输出可以是带索引的字典

indexDict={'b':{'index':0},'c':{'index':1},'d':{'index':4},. . .}

从娜迪亚的回答中学到了很多东西,我想答案是否定的

虽然她的反应有效,但我认为这比需要的要复杂得多。我只想

 def build_index(someList):
    indexDict={}
    for item in enumerate(someList):
        if item[1][1] not in indexDict:
           indexDict[item[1][1]]=item[0]
    return indexDict

Tags: 方法keyin列表forindex字典item
2条回答

如果我认为这就是你的要求。。。在

l = ['asd', 'asdxzc']
d = {}

for i, x in enumerate(l):
    d[x] = {'index': i}

这将产生您想要的结果

dict((myTuple[1], index) for index, myTuple in enumerate(l))

>>> l = [(1, 2, 3), (4, 5, 6), (1, 4, 6)]
>>> dict((myTuple[1], index) for index, myTuple in enumerate(l))
{2: 0, 4: 2, 5: 1}

如果您坚持使用字典来表示索引:

^{pr2}$

结果将是:

^{3}$

编辑 如果要处理键冲突,则必须按如下方式扩展解决方案:

def build_index(l):
    indexes = [(myTuple[1], index) for index, myTuple in enumerate(l)]
    d = {}
    for e, index in indexes:
        d[e] = min(index, d.get(e, index))
    return d

>>> l = [(1, 2, 3), (4, 5, 6), (1, 4, 6), (2, 4, 6)]
>>> build_index(l)
{2: 0, 4: 2, 5: 1}

编辑2

以及一个更广义和紧凑的解(在与sorted相似的定义中)

def index(l, key):
    d = {}
    for index, myTuple in enumerate(l):
        d[key(myTuple)] = min(index, d.get(key(myTuple), index))
    return d

>>> index(l, lambda a: a[1])
{2: 0, 4: 2, 5: 1}

因此,您的问题的答案是肯定的:在Python中,有一种方法可以通过容器的元素来索引容器列表(元组、列表、字典),而无需进行预处理。但是你要求把结果储存在字典里,这就不可能是一行行程序。但是这里没有预处理。列表只迭代一次。在

相关问题 更多 >

    热门问题