Python-сообщество
![]()
- Начало
- » Python для новичков
- » Разбить список строк.
#1 Окт. 8, 2009 11:41:35
jartasa От: Зарегистрирован: 2009-09-20 Сообщения: 78 Репутация: 0 Профиль Отправить e-mail
Разбить список строк.
Спасибо,то что надо.
#2 Окт. 8, 2009 13:12:54
pasaranax От: Зарегистрирован: 2009-06-13 Сообщения: 574 Репутация: 0 Профиль Отправить e-mail
Разбить список строк.
jartasa
Как бы мне надо было из списка в словарь,насколько я помню в списках нет items.
Я подумал, что тебе из словаря надо в список
#3 Окт. 8, 2009 23:01:35
jartasa От: Зарегистрирован: 2009-09-20 Сообщения: 78 Репутация: 0 Профиль Отправить e-mail
Разбить список строк.
Как поменять ключ и значение местами в словаре ?
Или подскажите аналог такой конструкции:
w — некое слово,заменяется если в словаре по ключу(в роли ключа выступает w) есть значение,а как сделать замену наоборот ? Т.е если значение == слово(w),то заменить слово на ключ ?
if self.sy.has_key(w):
w = w.replace(w,self.sy)
Отредактировано (Окт. 8, 2009 23:06:11)
#4 Окт. 8, 2009 23:59:28
pasaranax От: Зарегистрирован: 2009-06-13 Сообщения: 574 Репутация: 0 Профиль Отправить e-mail
Разбить список строк.
jartasa
Как поменять ключ и значение местами в словаре ?
все теми же конструкциями
d =
d = dict((val, key) for (key, val) in d.iteritems())
#5 Окт. 9, 2009 22:55:52
jartasa От: Зарегистрирован: 2009-09-20 Сообщения: 78 Репутация: 0 Профиль Отправить e-mail
Разбить список строк.
Как объеденить 2 словаря ?
#6 Окт. 10, 2009 09:00:05
PooH От: Зарегистрирован: 2006-12-05 Сообщения: 1948 Репутация: 72 Профиль Отправить e-mail
Разбить список строк.
jartasa
Как объеденить 2 словаря ?
Почитать уже в конце-концов проклятую документацию:
a.update()
updates a with key/value pairs from b, overwriting existing keys, returns None
update() accepts either another mapping object or an iterable of key/value pairs (as a tuple or other iterable of length two). If keyword arguments are specified, the mapping is then is updated with those key/value pairs: “d.update(red=1, blue=2)”. Changed in version 2.4: Allowed the argument to be an iterable of key/value pairs and allowed keyword arguments.
ЗЫ: Извините за резкость, но мне, например, было бы стыдно задавать на форуме вопрос, который решается минутным поиском в официальной документации, кстати и в переводе Откидыча тоже.
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
Отредактировано (Окт. 10, 2009 09:01:51)
Инвертируем ключи и значения в словаре
Напишите функцию, которая будет менять местами ключи и значения в словаре.
Примеры:
invert(< "z": "q", "w": "f" >) ➞ < "q": "z", "f": "w" >invert(< "a": 1, "b": 2, "c": 3 >) ➞ < 1: "a", 2: "b", 3: "c" >invert(< "zebra": "koala", "horse": "camel" >) ➞
Варианты решения:
def invert(d): return
def invert(dct): return
def invert(dct): return dict(zip(dct.values(),dct.keys()))
def invert(dct): return dict(map(reversed, dct.items()))
Изменение данных в словаре — Python: Cловари и множества
Словарь в Python — изменяемый или мутабельный. Но для добавления новой пары «ключ-значение» не нужны отдельные методы, вроде спискового метода .append — достаточно обычного присваивания:
d = <> # пустой словарь d["a"] = 100 print(d) # => d["b"] = 200 d["a"] = 0 print(d) # =>
Здесь вы можете увидеть, что присваивание значения новому ключу выглядит точно так же, как и присваивание существующему. Именно эту тему мы изучим подробнее в этом уроке
Метод pop
Удаление элементов из словаря можно сделать с помощью метода pop — в этом словарь уже больше похож на список. Только вместо индекса используется ключ:
d = 'a': 1, 'b': 2> d.pop('a') # 1 d # d.pop('BANG') # KeyError: 'BANG'
Этот пример показывает, что будет, если попытаться извлечь значение по несуществующему ключу — мы получим исключение.
Однако метод pop можно вызывать с указанием значения по умолчанию. В этом случае при отсутствии ключа в словаре будет возвращено это самое значение, а исключение возбуждено не будет:
d = 'a': 1, 'b': 2> d.pop('BANG', None) d.pop('BANG', 42) # 42
Аналогом спискового pop без аргументов для словаря служит метод popitem . Этот метод извлекает ключ и значение в виде кортежа, а если словарь уже пуст, то возбуждает исключение:
d = 'a': 1> d.popitem() # ('a', 1) d.popitem() # KeyError: 'popitem(): dictionary is empty'
В пайтоне, начиная с версии 3.7, гарантирован порядок LIFO — Last In First Out. Это значит, что пары будут извлекаться в порядке обратном добавлению, то есть последняя добавленная пара, будет извлечена первой. При этом мы можем быть уверены в том, что:
- Все пары будут извлечены
- Каждая пара будет извлечена строго один раз
Дополнение одного словаря другим
У списка есть метод extend , который расширяет один список другим. У словаря есть похожий по смыслу метод update . Но при вызове update ассоциированный объект словаря не просто получает пары «ключ-значение» из нового словаря. Происходит именно обновление данных — поэтому метод и называется update . Работает это так:
- Новые ключи дописываются в словарь
- Если какие-то ключи уже существовали до этого, то связанные с ними значения, будут заменены новыми
Так это выглядит в коде:
cart = 'apples': 2, 'oranges': 1> addon = 'oranges': 5, 'lemons': 3> cart.update(addon) cart #
В коде выше мы добавили лимоны и обновили количество апельсинов.
Копирование словаря
В случае списков мы можем сложить два списка двумя способами:
- Просто сложить два списка и получить новый
- Сделать копию одного списка и дополнить ее данными из второго
Но словари нельзя складывать, да и срезы словари тоже не поддерживают. Зато у словаря есть метод copy . Он работает как копирование списка с помощью среза [:] — при вызове он возвращает поверхностную копию из словаря. Так же ее называют «неглубокой копией» или shallow copy.
Поверхностная копия воспроизводит только структуру словаря: не копирует значения, а только создает на них новые ссылки. Тем не менее поверхностная копия — это новый словарь, который может изменять свой состав, не влияя на оригинал:
d = 'a': 1, 'b': [42]> c = d.copy() c.update('a': 10, '1k': 1024>) c # c['b'].append(None) c # d #
Словарь c получил собственную структуру, при этом его обновление не затронуло оригинальный словарь d . Однако изменение объекта списка по ссылке затронуло и оригинал, потому что при копировании словаря ссылка на список тоже скопировалась.
Очистка словаря
Списки можно очистить с помощью присваивания срезу l[:] = [] . В случае словаря вместо присваивания срезу используется метод clear .
Метод clear() удаляет все элементы из текущего словаря:
d = 'a': 1>
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Смена мест между ключами и их значениями
Необходимо сделать так, чтобы имена значений находились на местах ключей, а ключи, в свою очередь, находились на местах значений, к которым они присоединены. Пробовал сделать подобным образом:
>>>f2e = list(e2f.items()) >>>f2e >>>[('dog', 'chien'), ('cat', 'chat'), ('walrus', 'morse')] >>>for x in f2e: . x.reverse() . Traceback (most recent call last): File "", line 2, in AttributeError: 'tuple' object has no attribute 'reverse'
И только после вспомнил, что кортежи неизменяемые 🙂 Посоветуйте, как быть?
Отслеживать
48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 10 июл 2017 в 17:35
97 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Отслеживать
ответ дан 10 июл 2017 в 17:37
Sergey Gornostaev Sergey Gornostaev
66.5k 6 6 золотых знаков 53 53 серебряных знака 112 112 бронзовых знаков
10 июл 2017 в 17:50
Чтобы поменять местами ключи и значения в словаре:
f2e = dict(zip(e2f.values(), e2f.keys()))
Если значения неуникальны, то последнее среди дубликатов выигрывает — это значит, результат может меняться в зависимости от конкретной реализации Питона и даже от запуска к запуску на некоторых версиях, так как Питон не гарантирует порядок записей для словарей (до Python 3.7)
Отслеживать
ответ дан 10 июл 2017 в 18:04
52.3k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
Если что-то изменит исходный словарь между вызовами values() и keys() , в результирующем словаре не будет соответствия между ключами и значениями.
10 июл 2017 в 18:12
@SergeyGornostaev многопоточный код это отдельный вопрос — не имеет смысла рассматривать, если вопрос специально не об этом. Что вы думаете с вашим кодом произойдёт, если словарь во время итерации изменится (RuntimeError)
10 июл 2017 в 18:37
@SergeyGornostaev, объекты возвращенные методами values() и keys() — это то что в Python 2.7 называлось dictionary view объектами. При изменении исходного словаря соответственно меняются и объекты возвращенные методами values() и keys() . Если изменение произошло между вызовами этих методов, ничего плохого не случится: ideone.com/Xgxw2B
10 июл 2017 в 21:07
@insolor верно что значения, возвращаемые keys()/values() в Питоне 3, аналогичны значениям viewkeys(), viewvalues() из Питона 2 (название намекает, что это дополнительный вид на словарь — поэтому изменения видны, не копия), как раз поэтому RuntimeError произойдёт, если параллельно с итерацией какой-то другой код пытается словарь изменить (считать ли возможность RuntimeError «плохим» исходом— от задачи зависит).