Dict理解指数错误

时间:2018-04-03 09:44:35

标签: python dictionary itertools dictionary-comprehension

我正在从itertools groupby对象构造一个dict理解,为一些字符串构造一个查找字典。

#groupby iterable arranged by first 3 chars of each element of 'Titles' list.
lookup= groupby(sorted(Titles), key=itemgetter(0,1,2))
#key=concatenate the elements of the tuple, val=list of grouper iterable
lookdict={''.join(i):list(j) for i,j in lookup}

这第二行给了我IndexError: string index out of range。我无法分辨j,石斑鱼可迭代或dict comp中的join调用是否存在问题。 以下内容:

for i,j in lookup:
    print(''.join(i),j)

正如预期的那样,没有问题。

必须将值作为列表,将键作为字符串,以避免在每次查找时进行某种转换。

有谁可以指出我在哪里错了?

2 个答案:

答案 0 :(得分:1)

当您将标题传递给CREATE EXTENSION IF NOT EXISTS intarray; CREATE EXTENSION IF NOT EXISTS btree_gist; alter table match add exclude using gist ( matchday with =, (array[home_team_id,foreign_team_id]) with && ); 短于三个长度时,会发生这种情况:

itemgetter

itemgetter(0, 1, 2)('h') IndexError: string index out of range 在您理解之前不会发生,因为IndexError包含lookup个对象。这些对象是尚未解压缩的生成器。因此,通过在这些对象上调用itertools._grouper,您试图解压缩它们 - 导致错误。

我认为您应该将list更改为自定义函数,例如:

key

答案 1 :(得分:0)

这是一个非常有趣的问题。

您收到错误,因为Titles包含至少1个短于3个字符的元素。

在这种情况下,每个消耗lookup的attemt都会失败。 for i, j in lookupfor i in loopup,甚至只是list(lookup)

Titles = ['abc', 'asf', 'asf', 'qwer', 'asfgsadfa', 'a']
lookup = groupby(sorted(Titles), key=itemgetter(0, 1, 2))
list(lookup)

Traceback (most recent call last):
 File "main.py", line 5, in <module>
 print(list(lookup))
IndexError: string index out of range