我在迭代字典的键的值和执行数学运算时遇到了麻烦,因为每个键都有不同数量的值:
fruits = {
"banana": [4,5],
"apple": 2,
"orange":1.5,
"pear": 3
}
我想从代码中得到什么(即,我理想的产品):
banana [8, 10]
apple 4
orange 3.0
pear 6
我想将每个键中的每个整数乘以2。我尝试了以下方法,但我无法正确执行:
for fruit, price in fruits.items():
print(fruit, price*2)
for i in price:
print(fruit, i*2)
...But无济于事:这会产生:
banana [4, 5, 4, 5]
banana 8
banana 10
apple 4
好的,所以我试了一下:
for fruit, price in fruits.items():
#print(type(price))
if len(fruit)>0:
print(price*2)
elif len(fruit) == 0:
print(price*2)
它产生了这样的结果:
[4, 5, 4, 5]
4
3.0
6
这有可能吗?
任何答案都将不胜感激。
致以亲切的问候,
A.史密斯
发布于 2018-06-19 07:29:02
如果列表是例外而不是规则,那么您可以使用try
/ except
,如下所示:
def multiplier(x, n):
try:
return float(x)*n
except TypeError:
return [i*n for i in x]
res = {k: multiplier(v, 2) for k, v in fruits.items()}
print(res)
{'banana': [8, 10], 'apple': 4.0, 'orange': 3.0, 'pear': 6.0}
或者,如果您希望显式测试可迭代对象,则可以使用collections.Iterable
:
from collections import Iterable
def multiplier(x, n):
return [i*n for i in x] if isinstance(x, Iterable) else x*n
然后,对于格式化输出,您可以迭代您的结果:
for k, v in res.items():
print(k, v)
banana [8, 10]
apple 4.0
orange 3.0
pear 6.0
https://stackoverflow.com/questions/50918419
复制相似问题