2011-10-05 3 views
0

입력임의의 금액

datas2 = [[("01/01/2011", 1), ("02/02/2011", "No"), ("03/03/2011", 11)], 
[("01/01/2011", 2), ("03/03/2011", 22), ("22/22/2222", "no")], 
[("01/01/2011", 3), ("03/03/2011", 33), ("22/22/2222", "333")]] 

의도 된 출력

[("01/01/2011", 1, 2, 3), ("03/03/2011", 11, 22, 33)] 

[업데이트]

나는 실제 데이터와 더 많은 예제에 대해 질문했다 (역사상 지저분한 코드들) :

A      B      C 
09.05.2011;1.561  12.04.2011;14.59  12.04.2011;1.5 
10.05.2011;1.572  13.04.2011;14.50  13.04.2011;1.5  
11.05.2011;1.603  14.04.2011;14.56  14.04.2011;1.5  
12.05.2011;1.566  15.04.2011;14.54  15.04.2011;1.5  
13.05.2011;1.563  18.04.2011;14.54  18.04.2011;1.5  
16.05.2011;1.537  19.04.2011;14.52  19.04.2011;1.5  
17.05.2011;1.528  20.04.2011;14.53  20.04.2011;1.5  
18.05.2011;1.543  21.04.2011;14.59  21.04.2011;1.5  
19.05.2011;1.537  26.04.2011;14.65  26.04.2011;1.6  
20.05.2011;1.502  27.04.2011;14.68  27.04.2011;1.6  
23.05.2011;1.503  28.04.2011;14.66  28.04.2011;1.6  
24.05.2011;1.483  29.04.2011;14.62  29.04.2011;1.6  
25.05.2011;1.457  02.05.2011;14.65  02.05.2011;1.6  
26.05.2011;1.491  03.05.2011;14.63  03.05.2011;1.6  
27.05.2011;1.509  04.05.2011;14.54  04.05.2011;1.5  
30.05.2011;1.496  05.05.2011;14.57  05.05.2011;1.5  
31.05.2011;1.503  06.05.2011;14.57  06.05.2011;1.5  
01.06.2011;1.509  09.05.2011;14.61  09.05.2011;1.6  
03.06.2011;1.412  10.05.2011;14.66  10.05.2011;1.6  
06.06.2011;1.380  11.05.2011;14.71  11.05.2011;1.7  
07.06.2011;1.379  12.05.2011;14.71  12.05.2011;1.7  
08.06.2011;1.372  13.05.2011;14.70  13.05.2011;1.7  
09.06.2011;1.366  16.05.2011;14.75  16.05.2011;1.7  
10.06.2011;1.405  17.05.2011;14.69  17.05.2011;1.6  
13.06.2011;1.400  18.05.2011;14.65  18.05.2011;1.6  
14.06.2011;1.414  19.05.2011;14.69  19.05.2011;1.6 
  • 는 경우 I는 압축을 푼와 B는, 모든 값을 포함한다. I는 A, B 및 C를 풀었 경우
  • , 그것을 포함 것이다 :

    [ [ "2011년 9월 5일", 1.561, 14.61, 1.6, [ "2011년 5월 10일", 1.572, 14.66, 1.6 ], [ "11.05.2011", 1.603, 14.71, 1.7], [ "12.05.2011", 1.566, 14.71, 1.7], [ "13.05.2011", 1.563, 14.70, 1.7], [ 16.05.2011 ", 1.537, 14.75, 1.7], ["17.05.2011 ", 1.528, 14.69, 1.6], ["18.05.2011 ", 1.543, 14.65, 1.6], ["19.05.2011 " 1.537, 14.69, 1.6] ]

  • 파일을 열 A, B, C가 존재하여 예만큼

(10)는 그래서 모든 날짜는 것입니다 ...

+0

날짜의 유효성을 검사해야합니까? – JBernardo

+0

@JBernardo :이 경우가 아니라 단지 튜플의 압축을 풀고 싶습니다. 유효성 검사는 또 다른 질문입니다. – hhh

+0

좋아, 그럼 내가이 권리가 있는지 보자. 모든 목록에있는 각 날짜에 대해 (a) 날짜와 (b) 각 목록의 각 튜플과 연관된 값으로 구성된 튜플을 원하십니까? –

답변

3
from collections import defaultdict 
import itertools 

d = defaultdict(list) 
for i,j in itertools.chain.from_iterable(datas2): 
    if not isinstance(j, str): 
     d[i].append(j) 

d을 많이 값이 있어야합니다 DICT 같은 :

{'01/01/2011': [1, 2, 3], '03/03/2011': [11, 22, 33]} 

따라서 나중에 튜플로 포맷 할 수 있습니다. d.items()

"22/22/2222"는 유효성이 검사되지 않았지만 for 루프 내부에서이를 수행하기 쉽습니다.

+0

그의 예제 데이터 세트에는 '333'이 포함되어 있으며 출력에는 그 값이 포함되어 있지 않으므로 숫자가 아닌 것을 제외하고 싶다고 생각했습니다. – steveha

+0

@steveha 그래, 이제 알았어 ... 질문은 더 구체적이어야한다 ... – JBernardo

+0

"Pythonic"반복기를 사용하는 +1 – Peter

2

이 코드는 Python 2.x 또는 Python 3.x에서도 똑같이 작동하도록 작성되었습니다. 필자는 Python 2.7 및 Python 3.2에서이를 테스트했습니다.

from collections import defaultdict 

datas2 = [ 
    [("01/01/2011", 1), ("02/02/2011", "No"), ("03/03/2011", 11)], 
    [("01/01/2011", 2), ("03/03/2011", 22), ("22/22/2222", "no")], 
    [("01/01/2011", 3), ("03/03/2011", 33), ("22/22/2222", "333")] 
] 


def want_value(val): 
    """return true if val is a value we want to keep""" 
    try: 
     # detect numbers by trying to add to 0 
     0 + val 
     # no exception means it is a number and we want it 
     return True 
    except TypeError: 
     # exception means it is the wrong type (a string or whatever) 
     return False 

result = defaultdict(list) 

for lst in datas2: 
    for date, val in lst: 
     if want_value(val): 
      result[date].append(val) 

final_result = list(result.items()) 
print(final_result) 
+0

'no'매개 변수의 유효성을 검사하는 방법이 마음에 들지 않습니다 ... – JBernardo

+0

일반적으로 숫자를 사용하여 작업 할 때 나는 값을'int (val)'또는'float 발). 이 경우, 그는 '333'의 예제 문자열을 가지고 있었고 그는 포함 시키길 원하지 않았습니다. 나는 일반적으로 이것을 예외로 사용하여 Python에서 밀을 분류하고, 일반적으로 isinstance()를 사용하여 유형을 검사하는 것이 다소 어렵다고 생각합니다. 이 함수는''no '',''No''',''333'','None', 객체 인스턴스 등을 화면에 보여줄 것입니다. 내가 뭘 권하고 싶니? – steveha

+0

그래서 나는 그것을 좋아하지 않습니다 ... 당신은 모든 것을 막고 있으며 나중에 디버깅하기가 어려울 수 있습니다. 하지만 그건 내 의견이에요 – JBernardo