2014-02-21 2 views
0

Мне нужно создать набор в словаре.Создание набора в словаре

dicInvertedIndex = {} 
docID = 1 

for i in string: 
    if condition: 
    docID += 1 
    dicInvertedIndex[i] = [1, set(docID)] 

И у меня есть ошибка:

dicInvertedIndex[i] = [1, set(docID)] 
TypeError: 'int' object is not iterable 

Прежде чем я попробовал это, я создал список в словаре, и он работает.

dicInvertedIndex[i] = [ 1 , [ docID ] ] 

И это работает. Мне нужно создать словарь с ключами моих документов и ценностей (int, set())

как dic["awake"] = [5, {2, 30, 99, 234}]

Первоначально я использовал список, но это медленно, и я хочу использовать набор.

+0

'not iterable' звучит как цикл' for'. Дважды проверьте, что находится в 'string'. – Kevin

+2

Вы должны спросить о том, как решить вашу базовую проблему, а не о том, почему ваше попытка решения не работает. – roippi

+0

ОК, спасибо. Я задаю еще один вопрос: – Denis

ответ

2

set() конструктор принимает итератор. docID является целым числом и поэтому не является итерируемым.

Два обходных путей

{docID} 

или

set([docID]) 
2

Аргументом set() как ожидается, будет итерацию, просто положить docID в списке, когда вы передаете его:

dicInvertedIndex[i] = [1, set([docID])] 
+0

спасибо. Есть ли более подходящая структура хранения для моего использования. Мне нужна частота символов (количество) и где встречается – Denis

1

Я понятия не имею, что вы пытаетесь достичь, но я вижу вашу ошибку. Конструктор set требует итерации, и вы передаете целое число. Вот исправление:

dicInvertedIndex[i] = [1, set([docID])] 

Обратите внимание, что docID находится в квадратных скобках.

Смежные вопросы