2012-04-18 7 views
0

저는 파이썬을 가르쳐 왔으며 지금까지 그렇게 나쁘지 않았습니다. 내가 배우는 가장 쉬운 방법은 코딩을 시작하는 것입니다. 그래서 저는 비교적 간단한 작업을 도와주었습니다. 그리고 지금은 붙어있어하고 좌절 내가 뭘하는지 알아낼 수 없다는 점점 잘못공백을 제거하고 사전에 단일 키에 저장된 여러 값을 결합합니다.

그래서 난 (다양한 통화 쌍에 대한 환율있는) 각 키에 값이 사전이
{0: [[1, '.', 0, '-', 8]], 
1: [['.', 3, '.', 2, 0, 0, 1, '-']], 
2: [], 
3: [['.', '.']], 
4: [], 
5: [[2, 0, 1, 2, '-', 0, 1, '-', 1, 9]], 
6: [[1, '.', 0, 0, 9, 5]], etc... 

. 다양한 방법을 시도하고 인터넷 검색의 수많은 시간 후

0: [[1, '.', 0, '-', 8]] would become 0: '1.0-8' 
6: [[1, '.', 0, 0, 9, 5]] would be 6 : '1.0095' 
etc... 

, 내가하는 방법에 대한 아무런 생각이 없다 결론에 도달했습니다 예를 들어, 그래서 나는 하나의 문자열로 값을 설정하는 시도를하고 있어요 이것을 성취하십시오. 나는 바꾸기를 시도했다. 그리고 사전을 목록의 키 [값]을 가진 목록의 목록으로 바꾸고 결합 함수 등을 사용하여 반복하는 것을 시도하는 다양한 복잡한 루프를 시도했다. 절대 아무것도!

간단해야 할 것 같지만 포기하고 어떻게 해야할지 모르겠으니 여기 누군가가 나를 도와 줄 수 있습니다.

고맙습니다.

+0

당신이 무엇을 원하는 (그것도 반복 가능 객체와 함께 작업 할 수 있습니다) 2'와'4'을 할? –

답변

1

한 줄 ...

>>> {i:(''.join(str(x) for x in j[0]) if j else '') for i,j in d.items()} 
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'} 

질문으로, "멍청한 놈 친화적 인 방법을 쓰기"

d_new = {} 
for i,j in d.items(): 
    if j: 
     d_new[i] = ''.join(str(x) for x in j[0]) 
    else: 
     d_new[i] = '' 
+0

OMG, 내 눈. – Denis

+0

@Denis 실제로 꽤 아름다워요 :) – JBernardo

+0

대신 d.iteritems() 대신 ... – Michael

0
d = {0: [[1, '.', 0, '-', 8]], 6: [[1, '.', 0, 0, 9, 5]]} 
for k,v in d.iteritems(): 
    print str(k)+':'+''.join(str(el) for el in v[0]) 
+0

나는 OP가 하나의 포맷을 프린트하는 대신 새로운 사전을 만들고 싶어한다고 생각한다. – jamylak

+0

이것은 개념이다, 그것은 무엇이든간에 쉽게 재 작업되고 나는 stackoverflow가 숙제 솔루션을위한 세계 중심이라고 생각하지 않는다)) – Denis

+0

충분히 공정하지만 이것은 실제로 숙제가 아니며, OP는 스스로를 가르치고있다. – jamylak

0
>>> from itertools import chain 
>>> d = {0: [[1, '.', 0, '-', 8]], 1: [['.', 3, '.', 2, 0, 0, 1, '-']], 2: [], 
3: [['.', '.']], 4: [], 5: [[2, 0, 1, 2, '-', 0, 1, '-', 1, 9]], 6: [[1, '.', 0, 0, 9, 5]]} 
>>> {k:''.join(str(el) for el in chain.from_iterable(v)) for k,v in d.items()} 
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'} 
0

또 다른 방법. 여기서 체인은리스트를 언 래핑하고 빈리스트를 처리하는 데주의를 기울입니다. 직관적 인의 거의

>>> {k:"".join(map(str,chain(*v))) for k,v in spam.items()} 
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'} 

itertools.chain를 사용 [[1, '.', 0, '-', 8]] 같은 목록을 풀다 mapstrint의 목록을 변환하려면

>>> list(chain(*[[1, '.', 0, '-', 8]])) 
[1, '.', 0, '-', 8] 

를 사용하려면

접근, 사용 (이 할 수있는, 유의하시기 바랍니다 iterables에서도 작동)

>>> map(str,[1, '.', 0, '-', 8]) 
['1', '.', '0', '-', '8'] 

까지 join 문자열 목록이 사용됩니다. `

"".join(['1', '.', '0', '-', '8']) 

Dictionary Comprehension

+0

또한 체인 (* v) 대신에'chain.from_iterable (v)'를 사용했지만 제 접근법입니다 – jamylak

+0

@jamylak : 또한 목록 내장을 사용하지 않았습니다 – Abhijit

+0

아, 나는 그들이 훨씬 더 읽기 쉽다고 들었습니다 'map'보다. – jamylak

관련 문제