如何使用嵌套字典遍历列表?
How to iterate through a list with nested dictionaries?
所以我有一个包含嵌套字典的列表,我想做的是从字典中读取视图的值并将它们放入乘数。
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: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
这就是我得到的全部。我需要 5 行,所有这些都有不同的标题和不同的数量。帮助!!!提前致谢!
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: 835.12
Get a ride, anytime anywhere: 8108.70
Send money with GrabPay: 956.88
Ubereats now delivers nationwide: 96.34
Get cabs now with UberFlash: 628.70
您需要将 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))
您可以通过多种方式改进代码:
- 直接迭代字典而不是按索引。
- 为每个字典提取一次 "views" 值并分配给一个变量。
- 使用链式比较检查一个值是否介于两个值之间。
- 使用指定小数精度的 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: 835.12
Get a ride, anytime anywhere: 8108.70
Send money with GrabPay: 956.88
Ubereats now delivers nationwide: 96.34
Get cabs now with UberFlash: 628.70
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]
输出:
Healthy Living : 835.12
Get a ride, anytime anywhere : 8108.70000000007
Send money with GrabPay : 956.880000000001
Ubereats now delivers nationwide : 96.34
Get cabs now with UberFlash : 628.700000000004
所以我有一个包含嵌套字典的列表,我想做的是从字典中读取视图的值并将它们放入乘数。
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: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
Get cabs now with UberFlash: 628.700000000004
这就是我得到的全部。我需要 5 行,所有这些都有不同的标题和不同的数量。帮助!!!提前致谢!
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: 835.12
Get a ride, anytime anywhere: 8108.70
Send money with GrabPay: 956.88
Ubereats now delivers nationwide: 96.34
Get cabs now with UberFlash: 628.70
您需要将 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))
您可以通过多种方式改进代码:
- 直接迭代字典而不是按索引。
- 为每个字典提取一次 "views" 值并分配给一个变量。
- 使用链式比较检查一个值是否介于两个值之间。
- 使用指定小数精度的 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: 835.12
Get a ride, anytime anywhere: 8108.70
Send money with GrabPay: 956.88
Ubereats now delivers nationwide: 96.34
Get cabs now with UberFlash: 628.70
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]
输出:
Healthy Living : 835.12
Get a ride, anytime anywhere : 8108.70000000007
Send money with GrabPay : 956.880000000001
Ubereats now delivers nationwide : 96.34
Get cabs now with UberFlash : 628.700000000004