2015-04-01 8 views
0

Я пытаюсь объединить два списка на основе поля (по аналогии с выполнением внутреннего соединения)Объединение двух списков на основе столбца

List A: ФИО, должность, работник ID

Примеры записи

1) Боб, администраторы, 32443
2) Джек, Безопасность, 5464

Список B: Позиция, задачи

Примеры записей

1) Администратор, проверьте системные файлы
2) Admin, добавлять пользователей
3) Администратор, удалять пользователей
4) Безопасность, Perform отзыв
5) Безопасность, проверка настройки

мне нужен конечный результат будет так:

Боб, Admin, 32443, Проверьте системные файлы
Bob, Admin, 32443, добавлять пользователей
Bob, Admin, 32443, удаление пользователей
Джек, безопасность, 5464, Выполнить обзор
Джек, безопасность, 5464, Проверить настройки

Просьба указать, как включить такой код в простые циклы. Я новичок в Python Спасибо много заранее

+0

Как именно эти списки? Вы имеете в виду словари? – Peter

+0

Вы пытались использовать [pandas] (http://pandas.pydata.org/pandas-docs/dev/merging.html)? – b4hand

+0

@ Питер, они не словари. Они взяты из файлов csv. После этого некоторые манипуляции. После объединения этих списков мне нужно совместить результат с другим списком, а затем в конечном итоге скопировать в файл csv. –

ответ

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

Извините за вопрос новичков. Все еще в стадии обучения! Как использовать приведенный выше код для перехода к списку. ListC = (имя, позиция, emp_id, задачи для (имя, должность, emp_id), (позиция2, задачи) в itertools.product (ListA, ListB) , если позиция == position2) дает синтаксическую ошибку. –

+0

@GayathriGopalakrishnan: Синтаксис исправлен. Вам нужно будет использовать квадратные скобки или передать его в 'list()' для создания списка. – Kevin

+0

Спасибо, Кевин! Оно работает. –

Смежные вопросы