2017-12-25 17 views
-1

나는 사전을 통해 반복하고 모든 행의 첫 번째 float 값을 인쇄하려고하지만 나는 그 값을 원하는 방법을 선택하는 방법을 모르겠다.파이썬 사전을 통해 루핑 들어

내 사전 :

{'abc': 123123, 'defg': [ 
    ['123.4', '10'], 
    ['567.8', '10'], 
    ['91011.12', '10'] 
]} 

나는 출력이 원하는 :

123.4 
567.8 
91011.12 

이 또한 내가 그 값을 합계를. 반복하지 않고 SUM 메서드를 사용하여 더 쉬운 방법이 있습니까?

도움 주셔서 감사합니다. 나는 이것으로 정말로 길을 잃는다.

+0

그러나'의 항목을 'abc''이 목록은 아니다 (목록의 목록도 아님) 목록의 목록 인 사전 항목 만 처리해야합니까? 너 뭐 해봤 니? –

+0

[sum] (https://docs.python.org/3/library/functions.html#sum) 함수를 본 적이 있습니까? – Jerfov2

+0

'sum (mydict [ 'defg']의 x에 대한 x [0]) ' – Jerfov2

답변

-1

당신은 더 많은 기능 솔루션을 reduce를 사용할 수 있습니다

import re 
import itertools 
from functools import reduce 
s = {'abc': 123123, 'defg': [ 
['123.4', '10'], 
['567.8', '10'], 
['91011.12', '10'] 
]} 
new_s = list(itertools.chain(*[[float(c) for c in itertools.chain(*b) if re.findall('^\d+\.\d+$', c)] for a, b in s.items() if isinstance(b, list)])) 
print(new_s) 
print(reduce(lambda x, y:x+y, new_s)) 

출력 : 내가 그것을 가지고 생각

[123.4, 567.8, 91011.12] 
91702.32 
0

좋아. 도움말 Ajax1234와 Jerfov2에 감사드립니다!

루프 및 인쇄 옵션
s = {'abc': 123123, 'defg': [ 
['123.4', '10'], 
['567.8', '10'], 
['91011.12', '10'] 
]} 

:

for x in s['defg']: 
    print(x[0]) 

출력 :

123.4 
567.8 
91011.12 

루프 용으로 합산 :

summed = 0 
for x in s['defg']: 
    summed = summed + float(x[0]) 
print("%.2f" % summed) 

출력 :

파이썬에서 매우 끝나는 기능적 접근에서
91702.32 
0

여기에, 단지 문법 설탕입니다 작동하지 않는 방식으로 제 2 센트 :

import ast 
import itertools 

s = {'abc': 123123, 'defg': [ 
    ['123.4', '10'], 
    ['567.8', '10'], 
    ['91011.12', '10'] 
]} 

def str_is_float(value): 
    if isinstance(value, str): 
     value = ast.literal_eval(value) 
    if isinstance(value, float): 
     return True 
    else: 
     return False 

def get_floats(d): 
    for k, v in d.items(): 
     if isinstance(v, list): 
      for n in itertools.chain.from_iterable(v): 
       if str_is_float(n): 
        yield float(n) 
     elif str_is_float(v): 
      yield float(v) 

floats = list(get_floats(s)) 

# Print all the floats 
print(floats) 
# sum the floats 
print(sum(x for x in floats))