Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2019, 13:28   #1
makowei
 
Регистрация: 24.03.2019
Сообщений: 4
По умолчанию [Python 3] Получить значения словарей из списка словарей с помощью списка отсортированных ключей


Эта программка получает ключи словарей из списка словарей, сортирует их и записывает в новый список.
Непонятно, как связать список уже отсортированных ключей с исходным словарем. (Второй цикл для преобразования списка списков в простой список).
Код:
# На вход поступает список словарей. Написать функцию sentence, которая возвращает строку,
# состоящую из слов (значений словарей), разделенных пробелом в порядке возрастания
# целочисленных значений их ключей.
#
# Пример:
# [{"12": "back"}, {"0": "Never"}, {"7": "back"}] ==> "Never look back"


import traceback


def sentence(s):
        sortedKeys = []
        keysClean = []
        for unsortedKeys in s:
                sortedKeys.append(sorted(unsortedKeys.keys()))
        for sublist in sortedKeys:
            for item in sublist:
                keysClean.append(item))
        return ""


# Тесты
try:
    assert sentence([{"0": "is"}, {"14": "never"}, {"-100": "Lost"}, {"75": "again"}, {"15": "found"},
                     {"-9": "time "}]) == "Lost time is never found again"
    assert sentence([{"100": "overeducated"}, {"0": "never"}, {"": "or"}, {"11": "overdressed"}, {"-500": "You"},
                     {"-2": "can"}, {"7": "be"}]) == "You can never be overdressed or overeducated"
except AssertionError:
    print("TEST ERROR")
    traceback.print_exc()
else:
    print("TEST PASSED")
makowei вне форума Ответить с цитированием
Старый 24.03.2019, 15:45   #2
makowei
 
Регистрация: 24.03.2019
Сообщений: 4
По умолчанию

Спасибо. Решил.
Код:
import traceback
def sentence(s):
    copys = s
    for i in range(len(copys)):
        for j in range(len(copys)-1):
            if int(copys[j].copy().popitem()[0]) > int(copys[j+1].copy().popitem()[0]):
                    t = copys[j]
                    copys[j] = copys[j+1]
                    copys[j+1] = t
    res = ''
    for i in copys:
        res += i.copy().popitem()[1]
        if res[len(res)-1] != ' ':
            res+= ' '
    return res[0 : len(res)-1]
makowei вне форума Ответить с цитированием
Старый 24.03.2019, 15:53   #3
makowei
 
Регистрация: 24.03.2019
Сообщений: 4
По умолчанию

Или даже так.
Код:
import traceback
def sentence(s):
    dct = {}
    arr = []
    st = ""
    for i in s:
        dct.update(i)
    for i in dct.keys():
        arr.append(int(i))
    for i in sorted(arr):
        st+=" "+dct[str(i)]
    print (st.strip())
    return st.strip()
makowei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[python] Как найти минимум элементов из списка, соответствующих условию из другого списка? san-amkk Помощь студентам 1 20.12.2016 22:04
Создание списка из полей и ключей многомерного массива IntegralAL JavaScript, Ajax 1 06.12.2013 17:45
Тест для проверки словарей Тотошка91 Общие вопросы Delphi 1 16.06.2011 23:14
Алгоритм генерации словарей паролей заданной длины Nub Общие вопросы Delphi 1 15.10.2010 12:38
Принципы создания словарей doniyor БД в Delphi 1 02.12.2009 16:30