我无法浏览字典的密钥'值和执行数学运算,其中每个键具有不同数量的值:
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)
......但无济于事:这会产生:
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
这甚至可能吗?
任何答案都将不胜感激。
亲切的问候,
一个。史密斯
答案 0 :(得分:0)
此代码运行,与您的代码不同......但我不确定这是否完全满足您的尝试。您的代码会引发TypeError: 'int' object is not iterable
,因此导入collections
并检查您的项目是否可迭代可以安全地执行此操作:
import collections
fruits = {
"banana": [4, 5],
"apple": 2,
"orange": 1.5,
"pear": 3
}
for fruit, price in fruits.items():
if isinstance(price, collections.Iterable):
for i in price:
print(fruit, i * 2)
else:
print(fruit, price * 2)
<强>结果强>
banana 8
banana 10
apple 4
orange 3.0
pear 6
答案 1 :(得分:0)
如果列表是例外而不是规则,那么您可以使用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}
或者,如果您希望显式测试iterables,则可以使用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