分配两个元素并在Python中形成一个列表

时间:2017-12-06 14:23:21

标签: python list tuples assign

在我的项目中,我必须定义一个函数,其中我得到两个下面的列表和一个小时,通过早期文件提取(这些完全是任意的,但数据的顺序是相同的)。 “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)]

目标是将运营商(第一个列表)分配给客户(第二个列表)。分配必须根据知识领域(例如手机,打印机)和操作员的语言(例如葡萄牙语,英语)以及客户的帮助主题(例如笔记本电脑,相机)及其所说的语言(例如。 英式西班牙语)。此外,有必要记住,“优质”的客户必须首先服务于其他“高价”。必须根据客户工作的分钟数(每个列表元素的最后一个元组值)以及他们最后一次回答客户(例如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)

有什么不对吗?

2 个答案:

答案 0 :(得分:0)

我不会在这个答案中显示任何代码,但我会采用一种简单的算法方法。剩下的将取决于你。

我将采取的方法如下:

  • 循环客户

  • 对于每位客户,请查看客户所说的语言。

    • 遍历运营商并检查每个运营商是否使用与客户相同的语言。
    • 如果客户这样做,请检查他/她是否涵盖了客户需要帮助的问题。
    • 如果他/她这样做,请将操作员分配给客户。 (我不知道你会如何表示,所以我会这样离开。
  • 为下一位客户重复上述流程,直到所有客户都得到妥善处理。

我刚想出来的这个算法并不完美,但是如果你正在寻找的话,它应该完成工作。

有趣的部分现在正在实施(至少对我而言)。

希望这有帮助。

答案 1 :(得分:0)

我很久没有在python中编码了,所以我在这方面的经验非常有限,但在这些情况下你应该做的是逐步完成代码中的每一点并看看它的作用。通常你会发现某个地方的某个地方的输出并不是你所期望的那样并打破了代码。我花了大约5分钟设置代码并添加一些打印语句以查看代码输出并立即发现问题。 source

显然,运算符[k] [2]被视为字符串而不是列表,因此当您遍历它时,您将遍历每个字符而不是每个项目。快速查看列表后,您的操作员专业知识列表似乎是一个字符串而不是列表。我不确定这是否有意,但为了使你的代码工作,你需要以某种方式对其进行排序。