2013-04-18 2 views
2

나는이처럼 보이는 데이터 struicture 생산 코드가 있습니다, 난 단지 시퀀스의 첫 번째 두 요소를 원 그때 관련 값의 목록을 만들기 위해이를 필터링목록의 목록을 필터링 파이썬, 최종 목록을 만드는 방법?

{'AttributeId': '4192', 
'AttributeList': '', 
'ClassId': '1014 (AP)', 
'InstanceId': '0', 
'MessageType': '81 (GetAttributesResponse)', 
'ObjectInstance': '', 
'Protocol': 'BSMIS Rx', 
'RDN': '', 
'TransactionId': '66', 
'Sequences': [[], 
       [1,'2013-02-26T15:01:11Z'], 
       [], 
       [10564,13,388,0,-321,83,'272','05',67,67,708,896,31,128,-12,-109,0,-20,-111,-1,-1,0], 
       [10564,13,108,0,-11,83,'272','05',67,67,708,1796,31,128,-12,-109,0,-20,-111,-1,-1,0], 
       [10589,16,388,0,-15,79,'272','05',67,67,708,8680,31,125,-16,-110,0,-20,-111,-1,-1,0], 
       [10589,15,108,0,-16,81,'272','05',67,67,708,8105,31,126,-14,-109,0,-20,-111,-1,-1,0], 
       [10637,40,233,0,-11,89,'272','03',30052,1,5,54013,33,103,-6,-76,1,-20,-111,-1,-1,0], 
       [10662,46,234,0,-15,85,'272','03',30052,1,5,54016,33,97,-10,-74,1,-20,-111,-1,-1,0], 
       [10712,51,12,0,-24,91,'272','01',4013,254,200,2973,3,62,-4,-63,0,-20,-111,-1,-1,0], 
       [10737,15,224,0,-16,82,'272','01',3020,21,21,40770,33,128,-13,-108,0,-20,-111,-1,-1,0], 
       [10762,14,450,0,-7,78,'272','01',3020,21,21,53215,29,125,-17,-113,0,-20,-111,-1,-1,0], 
       [10762,15,224,0,-7,85,'272','01',3020,21,21,50770,33,128,-10,-105,0,-20,-111,-1,-1,0], 
       [10762,14,124,0,-7,78,'272','01',3020,10,10,56880,32,128,-17,-113,0,-20,-111,-1,-1,0], 
       [10812,11,135,0,-14,81,'272','02',36002,1,11,43159,31,130,-14,-113,1,-20,-111,-1,-1,0], 
       [10837,42,23,0,-9,89,'272','02',36002,1,11,53529,31,99,-6,-74,1,-20,-111,-1,-1,0,54], 
       [13,'2013-02-26T15:02:09Z'], 
       [], 
       [2,12,7,0,9,70,'272','02',20003,0,0,15535,0,0,0,0,1,100,100,-1,-1,0], 
       [5,15,44,0,-205,77,'272','02',20003,0,0,15632,0,0,0,0,1,100,100,-1,-1,0], 
       [7,25,9,0,0,84,'272','02',20002,0,0,50883,0,0,0,0,1,100,100,-1,-1,0]] 
} 

을 경우 길이였다> = 22. 필터링 된 목록의

len22seqs = filter(lambda s: len(s)>=22, data['Sequences']) 
UARFCNRSSI = [] 
for i in range(len(len22seqs)): 
    UARFCNRSSI.append([len22seqs[i][0], len22seqs[i][1]]) 

예는 다음과 같습니다 :

[[10564, 15], [10564, 13], [10589, 18], [10637, 39], [10662, 38], [10712, 50], [10737, 15], [10762, 14], [10787, 9], [10812, 12], [10837, 45], [3, 17], [7, 21], [46, 26], [48, 12], [49, 24], [64, 14], [66, 17], [976, 27], [981, 22], [982, 22], [983, 17], [985, 13], [517, 9], [521, 15], [525, 11], [526, 13], [528, 14], [698, 14], [788, 24], [792, 19]] 

그러나 지금 나는이 하위 목록의 각의 세 번째 요소를 필요가 있습니다 다음과 같이 내가 이것을했다. 즉이있다 : I 따르는 요소를 들어, 세 번째 요소로 여과 한 목록에 추가하는 (2)의 길이가 각리스트의 첫 번째 요소를 필요

[1,'2013-02-26T15:01:11Z'], 

. 그러나 길이가 2 인 새 목록이있는 경우 그 새 값을 후속 항목에 추가해야합니다.

그래서 내 최종 목록의 예는, 같이 길이 2 또 다른 목록을 찾기에 세 번째 요소 (13)에 대한 변경 사항에 주목 수 :이 작업을 수행하려면 어떻게

[[10564, 15, 1], [10564, 13, 1], [10589, 18, 1], [10637, 39, 1], [10662, 38, 1], [10837, 45, 1], [3, 17, 13], [7, 21, 13], [46, 26, 13], etc] 

를? 두 번 len> = 22 및 len = 2로 필터링해야하고, 길이가 2 인 목록에 대한 최종 목록에 요소 0 또는 1을 추가하고 싶지 않으므로 len> = 22에 대한 별도의 필터가 필요합니까?

답변

4

나는 그것을 읽을 수 있도록 노력할 것이다 :

UARFCNRSSI = [] 
x = None  # future "third element"; please choose a better name 
for item in data["Sequences"]: 
    if len(item) == 2: 
     x = item[0] 
    elif len(item) >= 22: 
     UARFCNRSSI.append([item[0], item[1], x]) 
+0

내가 생각처럼 액세스 할 수 있습니다 .. 'for' 루프 앞에'x'가 정의되어 있지 않습니다. 똑같은가? – namit

+2

@namit : 예방 조치. 처음 22 개 요소 목록 앞에 항상 2 개 요소 목록이 있어야합니까? –

+0

감사합니다. 계획했던 것보다 훨씬 낫고, 훨씬 깔끔하고 단순하며 읽기 쉽습니다. 처음에는 2 개의 요소 목록이 항상 존재합니다. 데이터는 cli에 명령의 출력이고 다른 요소가 생성되기 전에 2 개의 요소 목록이 있어야합니다. 그러나 당신은 매우 옳습니다, 거기에 있지 않은 경우에, 결과물로 인해 나는 그것을 예상하지 못했습니다. 그것은 준비하는 것이 가장 좋습니다! – Paul

3

내가 데이터를 필터링하는 발전기와 함께 가고 싶어요 :

def filterdata(sequences): 
    add = [] 
    for item in sequences:   
     if len(item) == 2: 
      add = [item[0]] 
     elif len(item) >= 22: 
      yield [item[0], item[1]] + add 

당신은 data = list(filterdata(data['Sequences']))

+0

덕분에, 나는 그것을 좋아한다! – Paul

관련 문제