Найти - Пользователи
Полная версия: Собрать все значения которые присутствуют в других словарях
Начало » Python для новичков » Собрать все значения которые присутствуют в других словарях
1 2
Lena13_08
У меня есть лист словарей(каждый раз номер этих словерей меняеться так как я нахожу их по ключу)
в такой форме:
 list({a:[ ['one':1] , ['two':1], ['three':2] ]} , {b:[ ['one':1] , ['four':1], ['five':2] ]})
мне нужно чтобы мне возвращало в этом примере:
'one'

Спасибо


Slow
Я честно прочитал написанное трижды. Трижды я честно пытался понять. Трижды у меня не вышло. Попробуйте переформулировать, что ли…
doza_and
Slow
Я честно прочитал написанное трижды.
Lena13_08
У меня есть лист словарей
А чего тут читать.
 >>> list({a:[ ['one':1] , ['two':1], ['three':2] ]} , {b:[ ['one':1] , ['four':1], ['five':2] ]})
Traceback (most recent call last):
  File "C:\comp\Python35\lib\code.py", line 64, in runsource
    code = self.compile(source, filename, symbol)
  File "C:\comp\Python35\lib\codeop.py", line 168, in __call__
    return _maybe_compile(self.compiler, source, filename, symbol)
  File "C:\comp\Python35\lib\codeop.py", line 99, in _maybe_compile
    raise err1
  File "C:\comp\Python35\lib\codeop.py", line 87, in _maybe_compile
    code1 = compiler(source + "\n", filename, symbol)
  File "C:\comp\Python35\lib\codeop.py", line 133, in __call__
    codeob = compile(source, filename, symbol, self.flags, 1)
  File "<interactive input>", line 1
    list({a:[ ['one':1] , ['two':1], ['three':2] ]} , {b:[ ['one':1] , ['four':1], ['five':2] ]})
                    ^
SyntaxError: invalid syntax
Lena13_08
Slow
Я честно прочитал написанное трижды. Трижды я честно пытался понять. Трижды у меня не вышло. Попробуйте переформулировать, что ли…
Я обьясню главную проблему так будет легче понять:
Я делаю поисковик для документов.
У меня есть индекс который предоставляет собой коллекцию словарей для каждого слова :
 {'term': [document_id, term_frequency], [document_id, term_frequency]......}
где: document_id это номер документа в котором присутствует слово term, и term_frequency — сколько раз в этом документе присутствует слово.
Значит я задаю вопрос программа уже делает сплит и чистит фразы, находит все словари(тоисть для каждого слова в вопросе) количество зависит от количества слов в моём вопросе
Так вот я их этого результата хочу взять только те документы которые имеюют ВСЕ слова из моего запроса.
Я запуталась в словарях
vic57
имхо списки тут лишние
 d = {}
d['term1'] =  {'id1':1,'id2':2,'id3':3}
d['term2'] = {'id1':2,'id2':4,'id3':5}
d['term3'] = {'id2':2,'id3':4,'id4':5}
s = set(d['term1'].keys()) & set(d['term2'].keys()) & set(d['term3'].keys())
print(s)
>>> 
{'id3', 'id2'}
Lena13_08
vic57
имхо списки тут лишние
Спасибо , но это не подойдёт, индекс построен в том виде как я написала, я не могу его изменить
vic57
так как вы написали работать не будет
 >>> d = {'term': [document_id, term_frequency], [document_id, term_frequency]}
SyntaxError: invalid syntax
>>> 
разве что
 >>> d={}
>>> d['t1'] = [['id1',1],['id2',2],['id3',3]]
>>> d['t2'] = [['id1',1],['id2',1],['id3',1]]
>>> d['t3'] = [['id1',1],['id2',1],['id4',1]]
>>> l1 = [i[0] for i in d['t1']]
>>> l2 = [i[0] for i in d['t2']]
>>> l3 = [i[0] for i in d['t3']]
>>> set(l1) & set(l2) & set(l3)
{'id1', 'id2'}
Lena13_08
Я думаю что можно, вот смотри у меня есть идея:
Например я запрашиваю ‘ term1, term2’
Сначала я выбираю все словари из индекса с term 1 и term2. Потом я беру все doc_id у словаря term1 и ищу их у словаря для term2. Может так получиться?
 for i in словари:
      for k,v in словарь.items():
            for j in v:
                  if j[0] in i:
                      print j
Что то вроде такого но я не знаю как сказать чтобы j встречался в каждом i
papuas
Lena13_08
У меня есть лист словарей(каждый раз номер этих словерей меняеться так как я нахожу их по ключу)
в такой форме:
 list({a:[ ['one':1] , ['two':1], ['three':2] ]} , {b:[ ['one':1] , ['four':1], ['five':2] ]})
Так вот как это оказывается правильно называется - “лист словарей”
Согласен с vic57, списки не нужны.
http://python.su/forum/topic/34124/

Надеюсь это вам поможет:
https://habrahabr.ru/post/319876/
doza_and
papuas
Так вот как это оказывается правильно называется - “лист словарей”
Папуас это никак не называется. Вам два раза написали что это синтаксически недопустимая конструкция.
Lena13_08
Спасибо , но это не подойдёт, индекс построен в том виде как я написала, я не могу его изменить
Учитывая что конструкция невозможная в питоне а ТС не желает ее менять то остается только сидеть и ждать когда язык изменят так чтобы он подходил для ее целей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB