2015-04-01 40 views
0

我想两个列表基于字段组合(类似于执行内部连接)结合基于列两份名单

列表A:姓名,职位,员工ID

样本条目

1)鲍勃,管理,32443
2)插孔,安全,5464

B组:位置,任务

样本条目

1)管理,检查系统文件
2)管理,添加用户
3)管理,删除用户
4)安全性,进行评审
5)安全检查设置

我需要最终的输出是这样的:

鲍勃,管理员,32443,检查系统文件
鲍勃,管理员,32443,添加用户
鲍勃,管理员,32443,删除用户
插孔,安全,5464,执行审查
插孔,安全,5464,检查设置

请指导我如何在简单循环中包含此类代码。我是新来的Python 谢谢各位大大提前

+0

这些列表究竟如何?你的意思是字典吗? – Peter 2015-04-01 15:13:38

+0

您是否尝试过使用[pandas](http://pandas.pydata.org/pandas-docs/dev/merging.html)? – b4hand 2015-04-01 15:27:58

+0

@彼得,他们不是字典。它们取自csv文件。之后做了一些操纵。组合这些列表后,我需要将结果与另一个列表结合起来,最终复制到一个csv文件。 – 2015-04-01 15:40:27

回答

0

以笛卡尔乘积,然后跳过它失败连接条件的项目:

((name, position, emp_id, tasks) 
for name, position, emp_id in ListA 
for position2, tasks in ListB 
if position == position2) 

如果我们使用itertools,我们可以缩短这个略微避免嵌套for循环:

((name, position, emp_id, tasks) 
for (name, position, emp_id), (position2, tasks) 
in itertools.product(ListA, ListB) 
if position == position2) 

上述两个片段都是生成器表达式。如果你想要一个真正的列表,将最外面的一对括号改为方括号。

+0

对不起,新手的问题。仍处于学习阶段!我如何使用上面的代码来获取列表。如果position == position2)给我一个语法错误,ListC =(name,position,emp_id, for(name,position,emp_id),(position2,tasks) in itertools.product(ListA,ListB) 。 – 2015-04-01 18:39:40

+0

@GayathriGopalakrishnan:语法固定。您需要使用方括号或将它传递给'list()'来创建一个列表。 – Kevin 2015-04-01 19:53:37

+0

谢谢凯文!有用。 – 2015-04-01 22:12:16