1 Востаннє редагувалося DimONN (08.02.2018 10:30:16)

Тема: Задача для використання "словника"

Є задача, в якій необхідно використати словник. Про структуру словника - що має бути ключем, нічого не сказано. Підкажіть, будь ласка, як би ви побудували цу структуру.

Задача:

Відомості про учня складаються з його унікального номера учнівського квитка, імені, прізвища, та назви класу (рік навчання та літера). Скласти словник і:

1) визначити. чи є в школі учні з однаковим прізвищем;
2) визначини, чи є учні з однаковим прізвищем в якихось паралельних класах;
3) визначити, чи є учні з однаковим прізвищем у якомусь класі;
4) визначити, в яких класах нараховується більше ніж 35 учнів;
5) отримати список учнів даного класу за зразками:
    прізвище ім'я
    прізвище і.
    і.прізвище.

І ще декілька пунктів.

Наскільки я розумію - формат має бути:

pupils={"Poroshenko":["Petro",123,"3-A"],"Yatseniuk":["Arseniy",113,"1-C"],"Grinevych":["Liliya",2223,"10-D"],}

2

Re: Задача для використання "словника"

Варіант. Зберігайте дані в простому списку тьюплів (чи класів, якщо по-хорошому), можна і словників, на кшталт

pupils = [("Poroshenko","Petro",123,"3-A"), ("Yatseniuk","Arseniy",113,"1-C"), ("Grinevych","Liliya",2223,"10-D")]
class Pupil:
  def __init__(self,lastname,name,number,group):
    self.lastname = lastname...
pupils = [Pupil("Poroshenko","Petro",123,"3-A"), ...]
pupils = [{"lastname":"Poroshenko","name":"Petro",...},...]

А потім збирайте словники за заданими ознаками:

pupils_by_lastname = {}
for pupil in pupils:
  if pupil.lastname in pupils_by_lastname:
    pupils_by_lastname[pupil.lastname].append(pupil) #всюди, де є 2 і більше - з однаковим прізвищем
  else
    pupils_by_lastname[pupil.lastname] = [pupil]
Подякували: DimONN1

3

Re: Задача для використання "словника"

@DimONN

{"number_of_ticket_1": {<info about pupil>}}

з його унікального номера учнівського квитка

4

Re: Задача для використання "словника"

# use python 3 !!!
from collections import Counter
pupils = {
    'unique_tickets_1': {'first_name': 'FName_1', 'last_name': 'LName_1', 'name_class': {'year_learn': 2005, 'litera': 'A'}},
    'unique_tickets_2': {'first_name': 'FName_2', 'last_name': 'LName_2', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_3': {'first_name': 'FName_3', 'last_name': 'LName_3', 'name_class': {'year_learn': 2000, 'litera': 'A'}},
    'unique_tickets_4': {'first_name': 'FName_4', 'last_name': 'LName_4', 'name_class': {'year_learn': 2001, 'litera': 'A'}},
    'unique_tickets_5': {'first_name': 'FName_5', 'last_name': 'LName_5', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_6': {'first_name': 'FName_6', 'last_name': 'LName_6', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_7': {'first_name': 'FName_7', 'last_name': 'LName_7', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_8': {'first_name': 'FName_8', 'last_name': 'LName_8', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_9': {'first_name': 'FName_9', 'last_name': 'LName_9', 'name_class': {'year_learn': 1987, 'litera': 'A'}},
    'unique_tickets_10': {'first_name': 'FName_10', 'last_name': 'LName_10', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_11': {'first_name': 'FName_11', 'last_name': 'LName_10', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_12': {'first_name': 'FName_12', 'last_name': 'LName_10', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_13': {'first_name': 'FName_13', 'last_name': 'LName_13', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_14': {'first_name': 'FName_14', 'last_name': 'LName_14', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_15': {'first_name': 'FName_15', 'last_name': 'LName_15', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_16': {'first_name': 'FName_16', 'last_name': 'LName_16', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_17': {'first_name': 'FName_17', 'last_name': 'LName_17', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_18': {'first_name': 'FName_18', 'last_name': 'LName_18', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_19': {'first_name': 'FName_19', 'last_name': 'LName_19', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_20': {'first_name': 'FName_20', 'last_name': 'LName_20', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_21': {'first_name': 'FName_21', 'last_name': 'LName_21', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_22': {'first_name': 'FName_22', 'last_name': 'LName_22', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_23': {'first_name': 'FName_23', 'last_name': 'LName_23', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_24': {'first_name': 'FName_24', 'last_name': 'LName_24', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_25': {'first_name': 'FName_25', 'last_name': 'LName_25', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_26': {'first_name': 'FName_26', 'last_name': 'LName_25', 'name_class': {'year_learn': 1999, 'litera': 'B'}},
    'unique_tickets_27': {'first_name': 'FName_27', 'last_name': 'LName_25', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_28': {'first_name': 'FName_28', 'last_name': 'LName_28', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_29': {'first_name': 'FName_29', 'last_name': 'LName_29', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_30': {'first_name': 'FName_30', 'last_name': 'LName_30', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_31': {'first_name': 'FName_31', 'last_name': 'LName_31', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_32': {'first_name': 'FName_32', 'last_name': 'LName_32', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_33': {'first_name': 'FName_33', 'last_name': 'LName_33', 'name_class': {'year_learn': 1996, 'litera': 'A'}},
    'unique_tickets_34': {'first_name': 'FName_34', 'last_name': 'LName_34', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_35': {'first_name': 'FName_35', 'last_name': 'LName_35', 'name_class': {'year_learn': 1986, 'litera': 'A'}},
    'unique_tickets_36': {'first_name': 'FName_36', 'last_name': 'LName_36', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_37': {'first_name': 'FName_37', 'last_name': 'LName_37', 'name_class': {'year_learn': 1988, 'litera': 'A'}},
    'unique_tickets_38': {'first_name': 'FName_38', 'last_name': 'LName_38', 'name_class': {'year_learn': 1999, 'litera': 'A'}},
    'unique_tickets_39': {'first_name': 'FName_39', 'last_name': 'LName_39', 'name_class': {'year_learn': 2000, 'litera': 'A'}},
    'unique_tickets_40': {'first_name': 'FName_40', 'last_name': 'LName_40', 'name_class': {'year_learn': 2000, 'litera': 'A'}}}

print("1) визначити. чи є в школі учні з однаковим прізвищем;")
tmp = []

for key, value in pupils.items():
    tmp.append(value.get("last_name", ''))

rez = set([x for x in tmp if tmp.count(x) > 1])
if rez:
    print("Результат: в школі учні з однаковим прізвищем: ", rez)
else:
    print("Результат: в школі учні з однаковим прізвищем: немає")

print("2) визначини, чи є учні з однаковим прізвищем в якихось паралельних класах;")
tmp_lst = []
for k, v in pupils.items():
    tmp_lst.append([v.get('last_name'), v.get('name_class').get('year_learn'), v.get('name_class').get('litera')])
tmp_tmp = []
for el in tmp_lst:

    tmp_tmp.append(el[0])

rez1 = list(set([x for x in tmp_tmp if tmp_tmp.count(x) > 1]))

year = []
alpha_class = []
if rez1:
    for i in tmp_lst:
        for j in rez1:
            if j == i[0]:

                year.append(i[1])
                alpha_class.append(i[2])

    for i in tmp_lst:
        for j, k, v in zip(rez1, year, alpha_class):
            if j == i[0]:
                if i[1] == k and i[2] != v:
                    print(i)

else:
    print("Результат : 2) визначини, чи є учні з однаковим прізвищем в якихось паралельних класах: немає")


print("3) визначити, чи є учні з однаковим прізвищем у якомусь класі;")

tmp_lst = []
for k, v in pupils.items():
    tmp_lst.append([v.get('last_name'), v.get('name_class').get('year_learn'), v.get('name_class').get('litera')])
tmp_tmp = []
for el in tmp_lst:

    tmp_tmp.append(el[0])

rez1 = list(set([x for x in tmp_tmp if tmp_tmp.count(x) > 1]))

year = []
alpha_class = []
if rez1:
    for i in tmp_lst:
        for j in rez1:
            if j == i[0]:

                year.append(i[1])
                alpha_class.append(i[2])

    for i in tmp_lst:
        for j, k, v in zip(rez1, year, alpha_class):
            if j == i[0]:
                if i[1] == k:
                    print(i)

else:
    print("Результат : 3) визначити, чи є учні з однаковим прізвищем у якомусь класі: немає")

print("4) визначити, в яких класах нараховується більше ніж 35 учнів;")
tmp_4 = []
for k, v in pupils.items():
    el = v.get("name_class").get("year_learn")
    tmp_4.append(el)


c = Counter(tmp_4)
for k, v in c.items():
    print("V klasi", k, "navcaetsa", v, "ychniv")
    if v > 35:
        print("Klas", k, "de e bilshe nish 35 ychniv")

print("5)отримати список учнів даного класу за зразками:")
print("a)  прізвище ім'я")


dict_temp = {}
for item in pupils.items():
    first_name = item[1].get('first_name')
    last_name = item[1].get('last_name')
    name_class = item[1].get('name_class')
    year_learn = name_class.get('year_learn')
    litera = name_class.get('litera')
    ldata = f'{year_learn},{litera}'
    if not dict_temp.get(ldata, ''):
        dict_temp[ldata] = [[first_name, last_name]]

    else:
        va_temp = dict_temp[ldata]

        va_temp.append([first_name, last_name])
        dict_temp[ldata] = va_temp

print("Результат:")
for k, v in dict_temp.items():
    print("Клас:", k, "Учні:", v)
Подякували: DimONN1