分配两个元素并在 Python 中形成列表
Assign two elements and form a list in Python
在我的项目中,我必须定义一个函数,在其中我得到下面的两个列表和一个小时,通过较早的文件提取(这些完全是任意的,但数据的顺序是相同的)。 "return" 命令必须 return 一个列表,其中包含操作员名称,后跟客户名称。
[('Ricardo Tavares', 'portuguese', '(mobiles; printers)', '14:15', 42), ('Carl Thompson', 'english', '(laptops)', '14:17', 54), ('Nuria Castro', 'spanish', '(cameras; hifi)', '14:24', 37), ('Giovanni Olivetti', 'italian', '(laptops; bimby; hifi)', '14:52', 21), ('Georg Muller', 'deutsch', '(cameras)', '15:05', 31)]
[('Henry Miller', 'english', 'laptops', 'premium', 3), ('Francois Greenwich', 'spanish', 'cameras', 'premium', 6), ('Ricardo Carvalho', 'portuguese', 'refrigerators', 'premium', 2)]
objective是将操作员(第一个列表)分配给客户(第二个列表)。分配必须根据知识领域(例如手机、打印机)和操作员的语言(例如葡萄牙语、英语)以及客户的帮助主题(例如笔记本电脑、相机)和他们都说的语言(例如。 英式西班牙语)。此外,有必要记住 "premium" 的客户必须比其他 "fremium" 的客户先得到服务。必须根据他们工作的分钟数(每个列表元素的最后一个元组值)以及他们最后一次回答客户的时间(例如 14:15)将操作员分配给客户。
在所有这些情况下,除了变得有点混乱之外,我无法完全弄清楚哪种方法是解决此代码的最有效方法而不是在编程时过于防御!
这是我现在拥有的,但列表仍为空白。
def assign_tasks(operators, requests, current_time):
operators = sorted(operators, key=itemgetter(3), reverse=False)
requests = sorted(requests, key=itemgetter(3), reverse=True)
tasks = []
langr = 0 #Variable that gets the language of the request's file (customer's language)
lango = 0 #Variable that gets the language of the operator's file (operator's language)
for i in range(0, len(requests)):
langr = requests[i][1] #What language does the customer speaks?
for k in range(0, len(operators)):
lango = operators[k][1] #What language does the operator speaks?
if langr == lango: #Do they speak the same language?
for j in range(0, len(operators[k][2])):
if operators[k][2][j] == requests[i][2]: # The operator knows how to solve the client's problem? If yes, then group them together.
tasks.append((current_time, operators[k][0], requests[i][0]))
operators.remove(operators[k])
requests.remove(requests[i])
print(tasks)
return tasks
operators = [('Leticia Ferreira', 'portuguese', '(laptops)', '11:03', 15), ('Atilio Moreno', 'portuguese', '(laptops)', '10:58', 104), ('Ruth Falk', 'german', '(phones; hifi)', '11:06', 150), ('Marianne Thibault', 'french', '(phones)', '11:09', 230), ('Mariana Santana', 'portuguese', '(phones)', '11:11', 230), ('Beate Adenauer', 'german', '(hifi; phones)', '11:12', 140), ('Romana Cerveny', 'czech', '(phones)', '11:13', 213), ('Zdenka Sedlak', 'czech', '(phones)', '11:13', 56)]
requests = [('Christina Holtzer', 'german', 'hifi', 'fremium', 7), ('Andrej Hlavac', 'czech', 'phones', 'fremium', 9), ('Dulce Chaves', 'portuguese', 'laptops', 'fremium', 15), ('Otavio Santiago', 'portuguese', 'laptops', 'fremium', 15), ('Dina Silveira', 'portuguese', 'phones', 'fremium', 9), ('Rafael Kaluza', 'slovenian', 'laptops', 'fremium', 13), ('Sabina Rosario', 'portuguese', 'laptops', 'premium', 10), ('Nuno Rodrigues', 'portuguese', 'laptops', 'fremium', 12), ('Feliciano Santos', 'portuguese', 'phones', 'fremium', 12)]
current_time = "14:55 06:11:2017"
assign_tasks(operators, requests, current_time)
有什么问题吗?
我不会在此答案中显示任何代码,但会采用一种简单的算法方法。剩下的由你决定。
我会采取的方法如下:
遍历客户
针对每个客户检查客户使用的语言。
- 遍历接线员并检查每个接线员是否说与客户相同的语言。
- 如果客户有,请检查 he/she 是否涵盖了客户需要帮助的问题。
- 如果 he/she 是,则将操作员分配给客户。 (我不知道你会怎么表示,所以我就这样吧。
- 为下一个客户重复上述过程,直到所有客户都得到照顾。
我刚刚提出的这个算法绝不是完美的,但如果这是您正在寻找的,它应该可以完成工作。
现在有趣的部分是实现它(至少对我而言)。
希望对您有所帮助。
我已经很久没有在python中编写代码了,所以我在这方面的经验非常有限,但是在这些情况下你应该做的是一步一步地检查代码中的每个点,看看它做了什么。通常,您会发现沿线某处的某些输出不是您期望的那样,从而破坏了代码。我花了大约 5 分钟设置代码并沿途添加了一些打印语句以查看代码输出并立即发现了问题。 https://repl.it/repls/MoistInstructiveIcelandichorse
显然 operators[k][2] 被视为字符串而不是列表,因此当您遍历它时,您将遍历每个字符而不是每个项目。快速查看您的列表后,您的操作员专业知识列表似乎是一个字符串而不是列表。我不确定这是不是有意为之,但为了使您的代码正常工作,您需要以某种方式解决它。
在我的项目中,我必须定义一个函数,在其中我得到下面的两个列表和一个小时,通过较早的文件提取(这些完全是任意的,但数据的顺序是相同的)。 "return" 命令必须 return 一个列表,其中包含操作员名称,后跟客户名称。
[('Ricardo Tavares', 'portuguese', '(mobiles; printers)', '14:15', 42), ('Carl Thompson', 'english', '(laptops)', '14:17', 54), ('Nuria Castro', 'spanish', '(cameras; hifi)', '14:24', 37), ('Giovanni Olivetti', 'italian', '(laptops; bimby; hifi)', '14:52', 21), ('Georg Muller', 'deutsch', '(cameras)', '15:05', 31)]
[('Henry Miller', 'english', 'laptops', 'premium', 3), ('Francois Greenwich', 'spanish', 'cameras', 'premium', 6), ('Ricardo Carvalho', 'portuguese', 'refrigerators', 'premium', 2)]
objective是将操作员(第一个列表)分配给客户(第二个列表)。分配必须根据知识领域(例如手机、打印机)和操作员的语言(例如葡萄牙语、英语)以及客户的帮助主题(例如笔记本电脑、相机)和他们都说的语言(例如。 英式西班牙语)。此外,有必要记住 "premium" 的客户必须比其他 "fremium" 的客户先得到服务。必须根据他们工作的分钟数(每个列表元素的最后一个元组值)以及他们最后一次回答客户的时间(例如 14:15)将操作员分配给客户。
在所有这些情况下,除了变得有点混乱之外,我无法完全弄清楚哪种方法是解决此代码的最有效方法而不是在编程时过于防御!
这是我现在拥有的,但列表仍为空白。
def assign_tasks(operators, requests, current_time):
operators = sorted(operators, key=itemgetter(3), reverse=False)
requests = sorted(requests, key=itemgetter(3), reverse=True)
tasks = []
langr = 0 #Variable that gets the language of the request's file (customer's language)
lango = 0 #Variable that gets the language of the operator's file (operator's language)
for i in range(0, len(requests)):
langr = requests[i][1] #What language does the customer speaks?
for k in range(0, len(operators)):
lango = operators[k][1] #What language does the operator speaks?
if langr == lango: #Do they speak the same language?
for j in range(0, len(operators[k][2])):
if operators[k][2][j] == requests[i][2]: # The operator knows how to solve the client's problem? If yes, then group them together.
tasks.append((current_time, operators[k][0], requests[i][0]))
operators.remove(operators[k])
requests.remove(requests[i])
print(tasks)
return tasks
operators = [('Leticia Ferreira', 'portuguese', '(laptops)', '11:03', 15), ('Atilio Moreno', 'portuguese', '(laptops)', '10:58', 104), ('Ruth Falk', 'german', '(phones; hifi)', '11:06', 150), ('Marianne Thibault', 'french', '(phones)', '11:09', 230), ('Mariana Santana', 'portuguese', '(phones)', '11:11', 230), ('Beate Adenauer', 'german', '(hifi; phones)', '11:12', 140), ('Romana Cerveny', 'czech', '(phones)', '11:13', 213), ('Zdenka Sedlak', 'czech', '(phones)', '11:13', 56)]
requests = [('Christina Holtzer', 'german', 'hifi', 'fremium', 7), ('Andrej Hlavac', 'czech', 'phones', 'fremium', 9), ('Dulce Chaves', 'portuguese', 'laptops', 'fremium', 15), ('Otavio Santiago', 'portuguese', 'laptops', 'fremium', 15), ('Dina Silveira', 'portuguese', 'phones', 'fremium', 9), ('Rafael Kaluza', 'slovenian', 'laptops', 'fremium', 13), ('Sabina Rosario', 'portuguese', 'laptops', 'premium', 10), ('Nuno Rodrigues', 'portuguese', 'laptops', 'fremium', 12), ('Feliciano Santos', 'portuguese', 'phones', 'fremium', 12)]
current_time = "14:55 06:11:2017"
assign_tasks(operators, requests, current_time)
有什么问题吗?
我不会在此答案中显示任何代码,但会采用一种简单的算法方法。剩下的由你决定。
我会采取的方法如下:
遍历客户
针对每个客户检查客户使用的语言。
- 遍历接线员并检查每个接线员是否说与客户相同的语言。
- 如果客户有,请检查 he/she 是否涵盖了客户需要帮助的问题。
- 如果 he/she 是,则将操作员分配给客户。 (我不知道你会怎么表示,所以我就这样吧。
- 为下一个客户重复上述过程,直到所有客户都得到照顾。
我刚刚提出的这个算法绝不是完美的,但如果这是您正在寻找的,它应该可以完成工作。
现在有趣的部分是实现它(至少对我而言)。
希望对您有所帮助。
我已经很久没有在python中编写代码了,所以我在这方面的经验非常有限,但是在这些情况下你应该做的是一步一步地检查代码中的每个点,看看它做了什么。通常,您会发现沿线某处的某些输出不是您期望的那样,从而破坏了代码。我花了大约 5 分钟设置代码并沿途添加了一些打印语句以查看代码输出并立即发现了问题。 https://repl.it/repls/MoistInstructiveIcelandichorse
显然 operators[k][2] 被视为字符串而不是列表,因此当您遍历它时,您将遍历每个字符而不是每个项目。快速查看您的列表后,您的操作员专业知识列表似乎是一个字符串而不是列表。我不确定这是不是有意为之,但为了使您的代码正常工作,您需要以某种方式解决它。