Поменять местами элементы словаря
Вопрос может быть не серьезный, но никак не соображу и в сети ничего толкового не найти. Есть список словарей:
[
{'Цитата': 'Каждый миг наслаждения — это дар богов. ', 'Автор': 'Клод Адриан Гельвеций', 'Ссылка': 'http://forismatic.com/ru/20376e8629/'},
{'Цитата': 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ', 'Автор': 'Карлос Кастанеда', 'Ссылка': 'http://forismatic.com/ru/9208878436/'},
{'Цитата': 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.', 'Автор': 'Эрих Мария Ремарк', 'Ссылка': 'http://forismatic.com/ru/ee22b4e505/'}
]
Подскажите, пожалуйста, как преобразовать словари, чтобы сначала шел автор, затем цитата, затем ссылка.
Ответы (4 шт):
Вы можете заполнять словарь изначально в необходимой последовательности. Также, не думаю что вам правда нужна определенная последовательность, т.к вы можете получать значения из словаря независимо от последовательностей.
Вообще спрашивается зачем?
Для вывода на экран можно решить в лоб, а для доступа к элементам порядок не важен
Но если очень чешется, то можно сделать так:
data = [
{'Цитата': 'Каждый миг наслаждения — это дар богов. ', 'Автор': 'Клод Адриан Гельвеций', 'Ссылка': 'http://forismatic.com/ru/20376e8629/'},
{'Цитата': 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ', 'Автор': 'Карлос Кастанеда', 'Ссылка': 'http://forismatic.com/ru/9208878436/'},
{'Цитата': 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.', 'Автор': 'Эрих Мария Ремарк', 'Ссылка': 'http://forismatic.com/ru/ee22b4e505/'}
]
data = [{'Автор': obj['Автор'], 'Цитата': obj['Цитата'], 'Ссылка': obj['Ссылка']} for obj in data]
print(*data, sep='\n')
будет выведено:
{'Автор': 'Клод Адриан Гельвеций', 'Цитата': 'Каждый миг наслаждения — это дар богов. ', 'Ссылка': 'http://forismatic.com/ru/20376e8629/'}
{'Автор': 'Карлос Кастанеда', 'Цитата': 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ', 'Ссылка': 'http://forismatic.com/ru/9208878436/'}
{'Автор': 'Эрих Мария Ремарк', 'Цитата': 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.', 'Ссылка': 'http://forismatic.com/ru/ee22b4e505/'}
Лучше не полагаться на внутреннее устройство словаря, а просто выводить поля в нужной последовательности:
dict_list =[
{'Цитата': 'Каждый миг наслаждения — это дар богов. ', 'Автор': 'Клод Адриан Гельвеций', 'Ссылка': 'http://forismatic.com/ru/20376e8629/'},
{'Цитата': 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ', 'Автор': 'Карлос Кастанеда', 'Ссылка': 'http://forismatic.com/ru/9208878436/'},
{'Цитата': 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.', 'Автор': 'Эрих Мария Ремарк', 'Ссылка': 'http://forismatic.com/ru/ee22b4e505/'}
]
for d in dict_list:
for k in ['Автор', 'Цитата', 'Ссылка']:
print(f'{k}: {d[k]}')
print()
Результат:
Автор: Клод Адриан Гельвеций
Цитата: Каждый миг наслаждения — это дар богов.
Ссылка: http://forismatic.com/ru/20376e8629/
Автор: Карлос Кастанеда
Цитата: Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела.
Ссылка: http://forismatic.com/ru/9208878436/
Автор: Эрих Мария Ремарк
Цитата: Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.
Ссылка: http://forismatic.com/ru/ee22b4e505/
Если хочется хранить отсортированный словарь, то используйте OrderedDict из collections. Вот как пример сортировка по алфавиту
from collections import OrderedDict
dict_list = [
{'Цитата': 'Каждый миг наслаждения — это дар богов. ', 'Автор': 'Клод Адриан Гельвеций', 'Ссылка': 'http://forismatic.com/ru/20376e8629/'},
{'Цитата': 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ', 'Автор': 'Карлос Кастанеда', 'Ссылка': 'http://forismatic.com/ru/9208878436/'},
{'Цитата': 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.', 'Автор': 'Эрих Мария Ремарк', 'Ссылка': 'http://forismatic.com/ru/ee22b4e505/'}
]
for i in range(len(dict_list)):
dict_list[i] = OrderedDict(sorted(dict_list[i].items(), key=lambda a: a[0]))
for i in dict_list:
print(i, end="\n")
Вывод:
OrderedDict([('Автор', 'Клод Адриан Гельвеций'), ('Ссылка', 'http://forismatic.com/ru/20376e8629/'), ('Цитата', 'Каждый миг наслаждения — это дар богов. ')])
OrderedDict([('Автор', 'Карлос Кастанеда'), ('Ссылка', 'http://forismatic.com/ru/9208878436/'), ('Цитата', 'Вместо того, чтобы посвятить себя миру, человек растрачивает себя на дела. ')])
OrderedDict([('Автор', 'Эрих Мария Ремарк'), ('Ссылка', 'http://forismatic.com/ru/ee22b4e505/'), ('Цитата', 'Ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным.')])