Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2017 12:21:11

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Собрать все значения которые присутствуют в других словарях

Lena13_08
Я думаю что можно, вот смотри у меня есть идея:
ну попробуйте и покажите. я даже придумать не могу зачем мне нужен словарь с одним ключом

Офлайн

#2 Дек. 5, 2017 22:35:43

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

Лена.
Задача понятня.
Спасибо тебе от нуба, за задачку для тренировки….! Полезно! ))
Потратил пару часов - решил!
Т.к. я не совсем разобрался какова точная структура входных данных… - сначала у тебя документ выше уровня слова… а потом ты описываеш, что слово выше документа…. - то я сделал в 2-х варинтах.

Еще, Елена - конструкция, которую ты предоставила сначала - она действительно невозможна…. и она не рабочая… я ее воспринял как принцип, которым ты хочеш передать идею нам… а вот некоторые - восприняли буквально и “насупились”… ))) Пудь пожалуйста впредь точнее… и вставляй проверенный интерпритатором код, чтобы не было 100500 вопросов и ответов…

Вот решение твоей задачи в 2-х вариантах:
CPython 3.4.3

Вариант - слово выше документа:

 DataBD={
'Вася':    {'A0001':10,'A0002': 1,'A0003':  0},
'Петя':    {'A0001': 0,'A0002':14,'A0003':111},
'Николай': {'A0001':15,'A0002': 1,'A0003':111},
'Оля':     {'A0001': 5,'A0002':13,'A0003':  0},
'Рябоконь':{'A0001': 5,'A0002': 0,'A0003':  0},
}
itog={} 
s=input('вводи уже свои слова сюды (чуствительно к регистру):')
s=s.strip() 
MyWords=s.split()
MyWords=list(set(MyWords)) #отсекаем повторяющиеся слова
kolWords=len(MyWords)
if kolWords==0:
    print('Слова надо вводить!!! А не тыркать энтер просто так!!!!')
else:
    for cursorWord in MyWords:
        if cursorWord in DataBD.keys():
            for cursorDoc in DataBD[cursorWord].keys():
                if DataBD[cursorWord][cursorDoc]>0.001:
                    if cursorDoc in itog:
                        itog[cursorDoc]+=1
                    else:
                        itog[cursorDoc]=1
        else:
            #если встретилось слово, которого вообще нет в БД, то АЛЕС! Выход и обнуление накопленного итога
            itog={}
            break
    # Выведем результаты...
    if len(itog)==0:
        print('Именно ВСЕ заданные слова НЕ содержатся НИ В ОДНОМ документе! ')
    else:
        itogList=[]
        for cursorItog in itog.keys():
            if itog[cursorItog]==kolWords:
                itogList.append(cursorItog)
        if len(itogList)>0.001:
            print('Номера документов, которые содержат ВСЕ слова: ',itogList)
        else:
            print('Именно ВСЕ заданные слова НЕ содержатся НИ В ОДНОМ документе! ')
Работа:
вводи уже свои слова сюды (чуствительно к регистру):Вася Оля Рябоконь
Номера документов, которые содержат ВСЕ слова:

вводи уже свои слова сюды (чуствительно к регистру):Вася Петя Рябоконь
Именно ВСЕ заданные слова НЕ содержатся НИ В ОДНОМ документе!

вводи уже свои слова сюды (чуствительно к регистру):Оля Вася Николай
Номера документов, которые содержат ВСЕ слова:

Вариант - документ выше слов

 DataBD={
'A0001':{'Вася':10,'Петя':0,'Николай':3,'Оля':4},
'A0002':{'Вася': 0,'Петя':1,'Николай':3,'Оля':0},
'A0003':{'Вася': 1,'Петя':1,'Николай':3,'Оля':1},
'A0004':{'Вася': 7,'Петя':0,'Николай':0,'Оля':2},
'A0005':{'Вася': 1,'Петя':1,'Николай':1,'Оля':0},
}
itog={}
s=input('вводи уже свои слова сюды (чуствительно к регистру):')
s=s.strip()
MyWords=s.split()
MyWords=list(set(MyWords)) #отсекаем повторяющиеся слова
kolWords=len(MyWords)
if kolWords==0:
    print('Слова надо вводить!!! А не тыркать энтер просто так!!!!')
else:
    for cursorWord in MyWords:
        for cursorDoc in DataBD.keys():
            if cursorWord in DataBD[cursorDoc].keys():
                if DataBD[cursorDoc][cursorWord]>0.001:
                    if cursorDoc in itog:
                        itog[cursorDoc]+=1
                    else:
                        itog[cursorDoc]=1
    # Выведем результаты...
    if len(itog)==0:
        print('Именно ВСЕ заданные слова НЕ содержатся НИ В ОДНОМ документе! ')
    else:
        itogList=[]
        for cursorItog in itog.keys():
            if itog[cursorItog]==kolWords:
                itogList.append(cursorItog)
        if len(itogList)>0.001:
            print('Номера документов, которые содержат ВСЕ слова: ',itogList)
        else:
            print('Именно ВСЕ заданные слова НЕ содержатся НИ В ОДНОМ документе! ')
Данные вводятся и выводятся как и в первом случае

Если что-то я упустил или найдеш ошибку в работе - пиши.
Если что-то непонятно - спрашивай.

Ладно.. я спать…
Удачи И в учебе И в бою!

Офлайн

#3 Дек. 6, 2017 09:48:10

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

Sdelayte_podskazku_imen
Если что-то я упустил или найдеш ошибку в работе - пиши.
Если что-то непонятно - спрашивай.
Похвально конечно,что вы потратили 2 часа.
Код безупречен.
Хочу спросить вашего разрешения для публикации данного творения на этом портале.

Отредактировано papuas (Дек. 6, 2017 09:55:43)

Офлайн

#4 Дек. 6, 2017 10:01:53

Lena13_08
Зарегистрирован: 2017-10-14
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

doza_and
Может я неправильно изложила задание, но я уже сделала и это реально:
query=['a','b']
def match(query):
match_docs=[] #тут я собираю все list в словарях
for doc in query:
t=[]
for k,v in doc.items():#мои словари
for j in v:
t.append(j[0])
match_docs.append(t)
s=set(match_docs[0]).intersection(*match_docs) #я искала вот это
return list(s)

Спасибо за то что загрузили как будто я какая то неумеха
Но спасибо что хотябы попытались помогти

Офлайн

#5 Дек. 6, 2017 10:09:20

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

Lena13_08
Может я неправильно изложила задание, но я уже сделала и это реально:
По какой книжке Вы учились?
У вас python с какой-то примесью.

Офлайн

#6 Дек. 6, 2017 10:51:25

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

papuas

Типа сумничал - значит за умного проканал?

Офлайн

#7 Дек. 6, 2017 11:43:38

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Собрать все значения которые присутствуют в других словарях

Lena13_08
Спасибо за то что загрузили как будто я какая то неумеха
у вас структура данных не поймешь какая по вашему коду
имхо тут нужно key-value хранилище или БД типа монго. лучше ее поизучайте
https://pypi.python.org/pypi/pymongo

Отредактировано vic57 (Дек. 6, 2017 11:44:49)

Офлайн

#8 Дек. 6, 2017 13:56:03

Lena13_08
Зарегистрирован: 2017-10-14
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

vic57
У меня данные именно и в МонгоДБ

Офлайн

#9 Дек. 6, 2017 14:16:28

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Собрать все значения которые присутствуют в других словарях

Lena13_08
У меня данные именно и в МонгоДБ
дело конечно ваше, но зачем тогда костыли городите?
хотя бы это изучите

Офлайн

#10 Дек. 7, 2017 23:02:46

Lena13_08
Зарегистрирован: 2017-10-14
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Собрать все значения которые присутствуют в других словарях

vic57


Я прекрасно знаю как работать с базами данных( разных видов)
Задание было другое

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version