У меня есть словарь, который нужно отсортировать. Я понимаю, что словарь нельзя отсортировать, поэтому я создаю список для выполнения сортировки на основе индекса. Проблема, с которой я сталкиваюсь, заключается в том, что в нескольких ключах есть повторяющиеся значения; также значения могут быть несколькими списками.
Словарь:
my_dict = {
'1' : ['Red', 'McDonald\'s'],
'2' : [['Orange', 'Wendy\'s'], ['Purple', 'Cookout']],
'3' : ['Yellow', 'Longhorn'],
'4' : ['Green', 'Subway'],
'5' : ['Blue', 'Chipotle'],
'6' : ['Indigo', 'Taco Bell'],
'7' : [['Violet', 'Steak n Shake'], ['Dark Red', 'Five Guys']],
'8' : ['Dark Orange', 'Wendy\'s'],
'9' : ['Aqua', 'Firehouse Subs'],
'10' : ['Magenta', 'McDonald\'s'],
}
Мне нужно иметь возможность сортировать это по ключу (номеру), цвету и ресторану. Проблема, с которой я сталкиваюсь, заключается в том, что печать должна быть сгруппирована, когда есть дубликаты, и я не могу понять, как правильно сортировать список, который я генерирую.
Пример печати по номеру:
1:
Red, McDonald's
2:
Orange, Wendy's
Purple, Cookout
3:
Yellow, Longhorn
...
Пример печати по цветам:
Aqua:
Firehouse Subs, 9
Blue:
Chipotle, 5
Dark Orange:
Wendy's, 8
...
Мое решение для этого состоит в том, чтобы создать список с каждым из ключей и значений в списке. Я все еще новичок, и я думаю, что это неправильный способ повторения этого словаря, но он работает для данного словаря.
sorted_number = []
for key, value in my_dict.items():
if len(value[0][0]) > 1:
working_list = (key, value[0][0], value[0][1], value[1][0], value[1][1])
sorted_number.append(working_list)
else:
working_list = (key, value[0], value[1])
sorted_number.append(working_list)
sorted_years = sorted(sorted_years, key=lambda y: y[0][0])
for i in sorted_years:
print('{}:'.format(i[0]))
if len(i) > 3:
print('\t{}, {}'.format(i[1], i[2])
print('\t{}, {}'.format(i[3], i[4]))
else:
print('\t{}, {}'.format(i[1], i[2]))
Поскольку некоторые значения представляют собой несколько списков, оператор if/else определяет, является ли значение одним или двумя списками. Затем это правильно создаст список (число, цвет, ресторан) или (число, цвет, ресторан, цвет, ресторан), который затем может отсортировать список по номеру. Проблема в том, что я пытаюсь отсортировать по цвету или ресторану. Я знаю, что могу сделать список только из трех элементов, чтобы сортировка работала правильно, но когда я перейду к печати, я получу несколько 2 и 7. Тот же результат с рестораном. Кроме того, это не решает проблему нескольких ресторанов. Я искал и тестировал около пяти дней, пытаясь распаковать словарь разными способами, но это самый близкий мне способ решения этой проблемы. Любая помощь приветствуется. Заранее спасибо.
Для ясности вот итерация печати для чисел:
for i in sorted_number:
print('{}:'.format(i[0]))
if len(i) > 3:
print('\t{}, {}'.format(i[1], i[2]))
print('\t{}, {}'.format(i[3], i[4]))
else:
print('\t{}, {}'.format(i[1], i[2]))
'7' : [['Violet', 'Steak n Shake'], ['Dark Red', 'Five Guys']]? Должен ли он идти после'8' : ['Dark Orange', 'Wendy\'s'](используя'Dark Red') или после'1' : ['Red', 'McDonald\'s'](используя'Violet')? - person Serge Ballesta   schedule 22.06.2018