2016-01-11 3 views
1

Я пытаюсь совместить объекты в списке, основываясь на их позициях в списке. Позиция в списке всегда одинакова для конкретного CSV, но зависит от клиента.Python - Соответствующие объекты на основе позиции списка

У меня есть словарь, который содержит 5 клиентов и столбец в CSV, где содержатся данные:

d = {'Client1':{ 
       'file1DataPositions':[1,3,5,6,9], 
       'file2DataPositions':[2,4,5,7,8]}, 
    'Client2':{ 
       'file1DataPositions':[3,4,5,6,7], 
       'file2DataPositions':[1,5,7,8,9]}, 
    'Client3':{ 
       'file1DataPositions':[2,6,7,8,9], 
       'file2DataPositions':[1,2,7,8,9]}, 
    'Client4':{ 
       'file1DataPositions':[2,3,4,6,6], 
       'file2DataPositions':[1,3,5,7,9]}, 
    'Client5':{ 
       'file1DataPositions':[2,4,6,8,9], 
       'file2DataPositions':[5,6,7,8,9]} 
    } 

У меня есть заполненный, встроенный список (разобрано CSV):

l = [['data1','123','ABC','CompanyName','Employee1','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data2','456','DEF','CompanyName','Employee2','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data3','789','GHI','CompanyName','Employee3','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data4','012','JKL','CompanyName','Employee4','15','123 Notareallstreet','Bobs Trucks','Newyork']] 

Основываясь на позиции индекса в списке встроенных, я хотел бы проверить, если индекс соответствует:

def iterationTest(): 
    for item in l: 
     for lis in item: 
      if lis.index() == d['Client1']['file1DataPositions']: 
       print('Match Found') 

iterationTest() 

Когда я запускаю это, я получаю: «index() принимает хотя бы 1 аргумент (0 данных)».

Есть ли правильный способ делать то, что я пытаюсь сделать?

+1

'если lis.index()', что вы проверить здесь? Какой индекс? –

+0

Метод ['index()'] (https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range) списка требует по крайней мере одного аргумента - значение элемента, чтобы найти индекс первого вхождения. – martineau

+0

Вы пытаетесь проверить, является ли 'index'' lis' 'in'' d ['Client1'] ['file1DataPositions'] ', например, в списке' [1,3,5,6,9] '? – gtlambert

ответ

1

Использование enumerate():

def iterationTest(): 
    for item in l: 
     for idx, lis in enumerate(item): 
      if idx in d['Client1']['file1DataPositions']: 
       print('Match Found') 

iterationTest() 

Это будет перебирать каждый lis в item, и на каждом этапе цикла она будет обеспечивать доступ к обоим lis и индекс, idx (который вы используете для сравнения).

+0

ДА! «Если вы пытаетесь проверить, находится ли idx lis в d ['Client1'] ['file1DataPositions'], используйте if idx в d ['Client1'] ['file1DataPositions']:« Это именно то, что я пытался делать. Я пойду дальше и приму этот ответ! –

0

что вы точно пытаетесь сделать? вы ищете индекс списка? я предполагаю вы пытаетесь сделать это:

d = {'Client1':{ 
       'file1DataPositions':[1,3,5,6,9], 
       'file2DataPositions':[2,4,5,7,8]}, 
    'Client2':{ 
       'file1DataPositions':[3,4,5,6,7], 
       'file2DataPositions':[1,5,7,8,9]}, 
    'Client3':{ 
       'file1DataPositions':[2,6,7,8,9], 
       'file2DataPositions':[1,2,7,8,9]}, 
    'Client4':{ 
       'file1DataPositions':[2,3,4,6,6], 
       'file2DataPositions':[1,3,5,7,9]}, 
    'Client5':{ 
       'file1DataPositions':[2,4,6,8,9], 
       'file2DataPositions':[5,6,7,8,9]} 
    } 
l = [['data1','123','ABC','CompanyName','Employee1','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data2','456','DEF','CompanyName','Employee2','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data3','789','GHI','CompanyName','Employee3','15','123 Notareallstreet','Bobs Trucks','Newyork'], 
    ['data4','012','JKL','CompanyName','Employee4','15','123 Notareallstreet','Bobs Trucks','Newyork']] 

def iterationTest(Preview=True): 
    for clientKey , clientValue in d.iteritems(): 
     for dataKey, dataValue in clientValue.iteritems(): 
      if Preview: 
       print "Data Position: %s"%dataKey 
      for eachnum in dataValue: 
       if eachnum <= len(l[0])-1: 
        if Preview: 
         print "Match Number: %s"%eachnum 
         print "Number Value: %s"%l[0][eachnum] 
         print "------------------------------" 
      if Preview: 
       print "==============================" 

iterationTest() 
Смежные вопросы