#python-3.x #list #function #dictionary #format
Вопрос:
Надеюсь, кто-нибудь сможет помочь мне со словарем:
data = [ { "firstname" : "David", "lastname" : "Brown", "class" : [ "economy" ] }, { "firstname" : "Alina", "lastname" : "Hoper", "class" : [ "economy", "business" ] }, { "firstname" : "Bill", "lastname" : "Flow", "class" : [ "business" ] }, { "firstname" : "James", "lastname" : "Frank", "class" : [ "economy" ] } ]
В качестве вывода мне нужно посмотреть, кто купил эконом-класс, а кто бизнес-класс: С сортировкой = по возрастанию по классу и внутри класса по имени. Так что на первом месте бизнес, а потом экономика. и Алина идет первой в обоих классах, потому что она купила оба класса.
business: Alina Hoper, Bill Flow, ... economy: Alina Hoper, David Brown, ...
Я пытался написать функцию, но сейчас не могу понять, с чего начать сортировку и как конвертировать диктофон и группировать данные по классам:
def analyze(customers_data): data = "" data = "{} {} n".format(customers_data["firstname"], customers_data["lastname"]) data = "{} n".format(customers_data["aff"]) return data for d in orders: print(analyze(d))
Надеюсь, кто-нибудь сможет помочь
Ответ №1:
Сначала вы должны получить список экономических/бизнес-клиентов, а затем распечатать имена из этих списков:
data = [ { "firstname" : "David", "lastname" : "Brown", "class" : [ "economy" ] }, { "firstname" : "Alina", "lastname" : "Hoper", "class" : [ "economy", "business" ] }, { "firstname" : "Bill", "lastname" : "Flow", "class" : [ "business" ] }, { "firstname" : "James", "lastname" : "Frank", "class" : [ "economy" ] } ] business_custom = [dic for dic in data if "business" in dic["class"]] eco_custom = [dic for dic in data if "economy" in dic["class"]] business_names = ', '.join(sorted([f"{dic['firstname']} {dic['lastname']}" for dic in business_custom])) economy_names = ', '.join(sorted([f"{dic['firstname']} {dic['lastname']}" for dic in eco_custom])) print(f"business: {business_names}") print(f"economy: {economy_names}")
Выход:
business : Alina Hoper, Bill Flow economy : Alina Hoper, David Brown, James Frank
Изменить: если вы заранее не знаете имена классов, вы можете создать набор классов:
class_set = set() for dic in data: for c in dic['class']: class_set.add(c) for c in sorted(list(class_set)): custom = [dic for dic in data if c in dic["class"]] names = ', '.join(sorted([f"{dic['firstname']} {dic['lastname']}" for dic in custom])) print(f"{c}: {names}")
Комментарии:
1. Большое спасибо. Это помогает. Я также попытался включить сортировку по lastanme, это работает, но не думаю, что это правильно: имена=’,’. join(сортировка([f»{dic[‘имя’]} {dic[‘фамилия’]}» для dic в обычае], ключ=лямбда x: x[6])) gt;gt;gt;gt;gt;gt; он показывает, как я хочу, но если я все понял правильно, он сортируется по 6-му значению (букве). Может быть, у вас есть подсказка, как складывать слова, а не буквы. Я попробовал [‘фамилия’], однако это показывает : строковые индексы должны быть целыми числами
2. вы можете напрямую сортировать своих клиентов по фамилиям, определив
custom = [dic for dic in sorted(data, key=lambda x:x['lastname']) if c in dic["class"]]
(удалите сортировку,names
чтобы впоследствии список не сортировался по имени)