2014-12-10 1 views
-1

Я не могу это понять.Вставка элементов одного списка в другой список, если какой-либо другой элемент соответствует

Вот мой выходной ток:

['Direct General Auto Insurance', 'IT Project Manager', 'Nashville', 'TN', '(615) 331-7540'] 
['Direct General Auto Insurance', 'IT Systems Manager', 'Nashville', 'TN', '(615) 340-6291'] 
['Direct General Auto Insurance', 'Junior web Developer', 'Nashville', 'TN', '(615) 399-4700'] 
['Grand Slam Universal, LLC', 'IT Specialist', 'Nashville', 'TN', '(615) 457-3516'] 
['Ingram Content Group', 'Desktop Engineer', 'La Vergne', 'TN', '(615) 793-5000'] 
['Direct General Auto Insurance', 'Data Scientist', 'Nashville', 'TN', '(615) 726-3091'] 
['Direct General Auto Insurance', 'Janitor', 'Nashville', 'TN', '(615) 831-2600'] 

Заголовки являются FIRMNAME, JOBTITLE, CITY, STATE, NUMBER.

Для тех же FIRMNAME s Мне нужно все соответствующее JOBTITLE s в том же ряду. Таким образом, если FIRMNAME s соответствует, затем добавьте соответствующие JOBTITLE s к этой строке.

Так что вывод будет выглядеть следующим образом:

['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 331-7540'] 
['Grand Slam Universal, LLC', 'IT Specialist', 'Nashville', 'TN', '(615) 457-3516'] 
['Ingram Content Group', 'Desktop Engineer', 'La Vergne', 'TN', '(615) 793-5000'] 

Я попытался зацикливание над ним и используя .insert() если был соответствующий FIRMNAME уже есть в списке, но не мог понять логику.

Спасибо за помощь.

редактировать:

Это желаемый результат:

['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 331-7540'] 
['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 340-6291'] 
['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 399-4700'] 
['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 726-3091'] 
['Direct General Auto Insurance', 'IT Project Manager, IT Systems Manager, Junior Web Developer, Data Scientist, Janitor', 'Nashville', 'TN', '(615) 831-2600'] 
['Grand Slam Universal, LLC', 'IT Specialist', 'Nashville', 'TN', '(615) 457-3516'] 
['Ingram Content Group', 'Desktop Engineer', 'La Vergne', 'TN', '(615) 793-5000'] 

Я хочу, чтобы сохранить все цифры.

+0

Извините, что поставил вопрос, но вы уверены, что это то, что вы хотите? В вашем примере вы имеете [FIRM, JOB, ... JOB, ..., NUMBER] и что NUMBER соответствует только первой задаче. Это предназначено? – PeterE

ответ

1

Используйте указатель, чтобы индексировать таблицу. Для каждой строки проверьте, уже ли вы видели компанию и делаете ее там. Если вам нужно усложниться (например, одна и та же компания с разными местоположениями), то ключ индекса может стать кортежем уникальной информации.

my_list = [ 
    ['Direct General Auto Insurance', 'IT Project Manager', 'Nashville', 'TN', '(615) 331-7540'], 
    ['Direct General Auto Insurance', 'IT Systems Manager', 'Nashville', 'TN', '(615) 340-6291'], 
    ['Direct General Auto Insurance', 'Junior web Developer', 'Nashville', 'TN', '(615) 399-4700'], 
    ['Grand Slam Universal, LLC', 'IT Specialist', 'Nashville', 'TN', '(615) 457-3516'], 
    ['Ingram Content Group', 'Desktop Engineer', 'La Vergne', 'TN', '(615) 793-5000'], 
    ['Direct General Auto Insurance', 'Data Scientist', 'Nashville', 'TN', '(615) 726-3091'], 
    ['Direct General Auto Insurance', 'Janitor', 'Nashville', 'TN', '(615) 831-2600'], 
] 

index = {} 

for item in my_list: 
    existing = index.get(item[0]) 
    if not existing: 
     index[item[0]] = item 
     # or this, if you want don't want to modify the existing table 
     # index[item[0]] = item[:] 
    else: 
     existing.insert(1, item[1]) 

for item in sorted(index.values()): 
    print item 

EDIT

Отредактированный результат совсем другой - вы хотите, чтобы вставить все рабочие места в каждой из оригинальных записей фирмы. В этом случае нам просто нужно создать список заданий на одну фирму, а затем вернуться к исходному списку и вставить их.

import collections 

my_list = [ 
    ['Direct General Auto Insurance', 'IT Project Manager', 'Nashville', 'TN', '(615) 331-7540'], 
    ['Direct General Auto Insurance', 'IT Systems Manager', 'Nashville', 'TN', '(615) 340-6291'], 
    ['Direct General Auto Insurance', 'Junior web Developer', 'Nashville', 'TN', '(615) 399-4700'], 
    ['Grand Slam Universal, LLC', 'IT Specialist', 'Nashville', 'TN', '(615) 457-3516'], 
    ['Ingram Content Group', 'Desktop Engineer', 'La Vergne', 'TN', '(615) 793-5000'], 
    ['Direct General Auto Insurance', 'Data Scientist', 'Nashville', 'TN', '(615) 726-3091'], 
    ['Direct General Auto Insurance', 'Janitor', 'Nashville', 'TN', '(615) 831-2600'], 
] 

index = collections.defaultdict(list) 

# generate list of jobs per firm 
for item in my_list: 
    index[item[0]].append(item[1]) 

# insert into existing table 
for item in my_list: 
    del item[1] 
    item[1:2] = index[item[0]] 

for item my_list: 
    print item 

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

  • Нет связанных вопросов^_^