首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:遍历字典的键的值,每个键的值数量不均匀

Python:遍历字典的键的值,每个键的值数量不均匀
EN

Stack Overflow用户
提问于 2018-06-19 06:47:07
回答 1查看 140关注 0票数 0

我在迭代字典的键的值和执行数学运算时遇到了麻烦,因为每个键都有不同数量的值:

代码语言:javascript
复制
fruits  = {
"banana": [4,5],
"apple": 2,
"orange":1.5,
"pear": 3   
}

我想从代码中得到什么(即,我理想的产品):

代码语言:javascript
复制
banana [8, 10]
apple 4
orange 3.0
pear 6

我想将每个键中的每个整数乘以2。我尝试了以下方法,但我无法正确执行:

代码语言:javascript
复制
for fruit, price in fruits.items():
    print(fruit, price*2)
    for i in price:
        print(fruit, i*2)

...But无济于事:这会产生:

代码语言:javascript
复制
banana [4, 5, 4, 5]
banana 8
banana 10
apple 4

好的,所以我试了一下:

代码语言:javascript
复制
for fruit, price in fruits.items():
#print(type(price))

if len(fruit)>0:
    print(price*2)

elif len(fruit) == 0:
    print(price*2)

它产生了这样的结果:

代码语言:javascript
复制
[4, 5, 4, 5]
4
3.0
6

这有可能吗?

任何答案都将不胜感激。

致以亲切的问候,

A.史密斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 07:29:02

如果列表是例外而不是规则,那么您可以使用try / except,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
from collections import Iterable

def multiplier(x, n):
    return [i*n for i in x] if isinstance(x, Iterable) else x*n

然后,对于格式化输出,您可以迭代您的结果:

代码语言:javascript
复制
for k, v in res.items():
    print(k, v)

banana [8, 10]
apple 4.0
orange 3.0
pear 6.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50918419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档