【问题标题】:Python - Matching Objects Based on List PositionPython - 基于列表位置匹配对象
【发布时间】:2016-01-11 14:56:31
【问题描述】:

我正在尝试根据对象在列表中的位置来匹配列表中的对象。对于特定的 CSV,列表中的位置始终相同,但因客户而异。

我有一个字典,其中包含 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)”错误。

有没有正确的方法来做我想做的事情?

【问题讨论】:

  • if lis.index() 你在这里检查什么?什么索引?
  • 列表的index() 方法至少需要一个参数——要查找第一次出现的索引的元素的值。
  • 您是否要检查lisindex 是否为in d['Client1']['file1DataPositions'],例如在[1,3,5,6,9] 列表中?
  • 与您要检查的内容匹配的索引?

标签: python loops indexing


【解决方案1】:

使用enumerate():

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

iterationTest()

这将遍历item 中的每个lis,并且在循环中的每个阶段,它将提供对lis 及其索引idx(用于比较)的访问。

【讨论】:

  • 是的! “如果您要检查 lis 的 idx 是否在 d['Client1']['file1DataPositions'] 中,请使用 if idx in d['Client1']['file1DataPositions']:”这正是我正在尝试的去做。我会继续接受这个答案!
【解决方案2】:

你到底想做什么?您正在寻找列表索引? 我猜你正在尝试这样做:

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2013-08-19
    相关资源
    最近更新 更多