【问题标题】:How to iterate through a list with nested dictionaries?如何遍历带有嵌套字典的列表?
【发布时间】:2018-07-18 07:56:34
【问题描述】:

所以我有一个包含嵌套字典的列表,我想做的是从字典中读取视图的值并将它们通过乘数。

video_ads=({'title': 'Healthy Living', 'company': 'Health Promotion 
Board','views': 15934},
{'title': 'Get a ride, anytime anywhere', 'company': 'Uber', 'views': 
923834},
{'title': 'Send money with GrabPay', 'company': 'Grab', 'views': 23466},
{'title': 'Ubereats now delivers nationwide', 'company': 'Uber', 'views': 
1337},
{'title': 'Get cabs now with UberFlash', 'company': 'Uber', 'views': 90234})

所以我要做的就是把标题和视图乘以某个因素,这就是我到目前为止所写的

def payment_for_views(x):
    for x in range(0,5):
        x = x+1

        if video_ads[x]['views'] >= 50000:
            payment = video_ads[x]['views']*0.55
        elif views <50000 and video_ads[x]['views'] >=10000:
            payment=video_ads[x]['views']*0.68
        else:
            payment = video_ads[x]['views']*0.82
    #print(x)
    print(video_ads[x]['title'] + ': $'+ str(payment))
    print(video_ads[x]['title'] + ': $'+ str(payment))
    print(video_ads[x]['title'] + ': $'+ str(payment))
    print(video_ads[x]['title'] + ': $'+ str(payment))
    print(video_ads[x]['title'] + ': $'+ str(payment))

但它似乎只打印一行,例如:

 Get cabs now with UberFlash: $49628.700000000004
 Get cabs now with UberFlash: $49628.700000000004
 Get cabs now with UberFlash: $49628.700000000004
 Get cabs now with UberFlash: $49628.700000000004
 Get cabs now with UberFlash: $49628.700000000004

这就是我所得到的。我需要 5 行,它们都有不同的标题和不同的数量。帮助!!!并提前感谢!

【问题讨论】:

  • 在 for 循环中缩进 print 语句。它只打印一个对象,因为x = 5 总是

标签: python python-3.x dictionary nested-loops nested-lists


【解决方案1】:
video_ads=({'title': 'Healthy Living', 'company': 'Health Promotion Board','views': 15934},
           {'title': 'Get a ride, anytime anywhere', 'company': 'Uber', 'views': 923834},
           {'title': 'Send money with GrabPay', 'company': 'Grab', 'views': 23466},
           {'title': 'Ubereats now delivers nationwide', 'company': 'Uber', 'views': 1337},
           {'title': 'Get cabs now with UberFlash', 'company': 'Uber', 'views': 90234})

def payment_for_views(item):
    if item >= 50000:
        payment = item * 0.55
    elif item < 50000 and item >= 10000:
        payment = item * 0.68
    else:
        payment = item * 0.82
    return payment

[print(per_ad['title'], ': $' + str(payment_for_views(per_ad['views']))) for per_ad in video_ads]

输出:

健康生活:10835.12 美元

随时随地搭车:$508108.70000000007

使用 GrabPay 汇款:$15956.880000000001

Ubereats 现在在全国范围内送货:1096.34 美元

现在使用 UberFlash 打车:49628.700000000004 美元

【讨论】:

    【解决方案2】:

    您需要将print 语句放在for 循环中。

    在循环之后和循环之外留下print 意味着x 将固定为for 循环中设置的最终值。

    def payment_for_views(x):
        for x in range(len(x)):
            if video_ads[x]['views'] >= 50000:
                payment = video_ads[x]['views']*0.55
            elif video_ads[x]['views'] <50000 and video_ads[x]['views'] >=10000:
                payment=video_ads[x]['views']*0.68
            else:
                payment = video_ads[x]['views']*0.82
            print(video_ads[x]['title'] + ': $'+ str(payment))
    

    您可以通过多种方式改进代码:

    1. 直接迭代您的字典,而不是按索引。
    2. 为每个字典提取一次“views”值并分配给一个变量。
    3. 使用链式比较来检查一个值是否介于其他两个值之间。
    4. 使用指定小数精度的 f 字符串 (Python 3.6+)。

    这是一个演示:

    def payment_for_views(x):
        for item in x:
            views = item['views']
            if views >= 50000:
                factor = 0.55
            elif 10000 <= views < 50000:
                factor = 0.68
            else:
                factor = 0.82
    
            print(f'{item["title"]}: ${views*factor:.2f}')
    
    payment_for_views(video_ads)
    

    结果:

    Healthy Living: $10835.12
    Get a ride, anytime anywhere: $508108.70
    Send money with GrabPay: $15956.88
    Ubereats now delivers nationwide: $1096.34
    Get cabs now with UberFlash: $49628.70
    

    【讨论】:

    • 谢谢你,我的好先生,我玩弄了我最后一个打印函数的缩进,让它进入 for 循环,它就像一个魅力
    【解决方案3】:
    for a in video_ads:
        print('%s: $%.2f' % (a['title'], a['views'] * (0.55 if a['views'] >= 50000 else 0.68 if a['views'] >= 10000 else 0.82)))
    

    这个输出:

    Healthy Living: $10835.12
    Get a ride, anytime anywhere: $508108.70
    Send money with GrabPay: $15956.88
    Ubereats now delivers nationwide: $1096.34
    Get cabs now with UberFlash: $49628.70
    

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 2015-12-06
      • 2021-11-16
      • 1970-01-01
      • 2012-07-09
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多