用于循环Python字典
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于循环Python字典相关的知识,希望对你有一定的参考价值。
我正在尝试循环遍历字典并打印每行的第一个浮点值,但我不知道如何选择我只想要那些值。
我的字典:
{'abc': 123123, 'defg': [
['123.4', '10'],
['567.8', '10'],
['91011.12', '10']
]}
我希望输出为:
123.4
567.8
91011.12
我也要总结这些价值观。在没有循环的情况下使用SUM方法更容易实现吗?
谢谢您的帮助!我真的迷失了。
答案
好吧,我想我明白了。感谢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
与for循环相加:
summed = 0
for x in s['defg']:
summed = summed + float(x[0])
print("%.2f" % summed)
输出:
91702.32
另一答案
最后,Python中的任何函数式方法都只是语法糖,这里是非功能性的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))
另一答案
您可以使用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
以上是关于用于循环Python字典的主要内容,如果未能解决你的问题,请参考以下文章