繁体   English   中英

遍历字典列表并打印消息

[英]Iterate through list of dictionaries and print message

我有一个类似于以下内容的字典列表:

points = [
{"callsign": "A001", "daily_points":10, "number":"+447774076621"},
{"callsign": "A002", "daily_points":5, "number":"+447958708481"}
]

我正在尝试遍历列表以打印如下消息:“嗨 A001,您今天收到了 10 分”

我尝试使用以下代码:

for callsign, daily_points in points.items():
print(f"Hi {callsign} you recieved {daily_points} points today.")

但它返回: AttributeError: 'list' object has no attribute 'items'

我究竟做错了什么?

points是一个列表,而不是一个字典。 您必须遍历列表中的每个元素,然后阅读字典。 代码看起来像这样:

for point in points:
    print(f"Hi {point['callsign']} you received {point['daily_points']} points today.")

您可以使用str.format

for point in points:
    print("Hi {callsign} you recieved {daily_points} points today.".format(**point))

此外,由于在 python 3.6+ dict 的保留顺序中,您可以保留大部分代码,只需将points.items()替换为map(dict.values, points) points.items() map(dict.values, points)

for callsign, daily_points, *_ in map(dict.values, points):
    print(f"Hi {callsign} you recieved {daily_points} points today.")

变量“points”是字典列表,而不是字典本身。 要遍历列表中的每个字典,您可以:

points = [
{"callsign": "A001", "daily_points":10, "number":"+447774076621"},
{"callsign": "A002", "daily_points":5, "number":"+447958708481"}
]

for point in points:
    print(f"Hi {point['callsign']} you recieved {point['daily_points']} points today.")

这将遍历列表,并打印出每个字典中的信息。

你可以试试这个:

for point in points:
    callsign, daily_points, number = point['callsign'], point['daily_points'], point['number']
    print(f"Hi {callsign} you recieved {daily_points} points today.")

您可以以points遍历每条记录并执行此操作。

for i in range(len(points)):
    print(f"Hi {points[i]['callsign']} you recieved {points[i]['daily_points']} points today.")

输出

Hi A001 you recieved 10 points today.
Hi A002 you recieved 5 points today.

问题是您正在迭代points ,这是一个列表并且没有items属性。

一种方法是使用.format并直接传递字典:

points = [
    {"callsign": "A001", "daily_points": 10, "number": "+447774076621"},
    {"callsign": "A002", "daily_points": 5, "number": "+447958708481"}
]

for d in points:
    print("Hi {callsign} you received {daily_points} points today.".format(**d))

输出

Hi A001 you received 10 points today.
Hi A002 you received 5 points today.

最简单的解决方案如下所示:

for person in points:
    print(f"Hi {person['callsign']} you recieved {person['daily_points']} points today.")

您的解决方案是错误的,因为列表没有方法 items(),并且它无法像这样解压缩字典键。

您需要使用密钥访问该值

for user in points:
    print(f"Hi {user['callsign']} you recieved {user['daily_points']} points today.")

问题是 items() 方法仅适用于列表,不适用于字典。 但是,您可以尝试以下操作:

for dictionary in points:
    print(f"Hi {dictionary['callsign']} you recieved {dictionary['daily_points']} points today.")

或者您可以使用 get() 方法,如下所示:

for dictionary in points:
    print(f"Hi {dictionary.get('callsign')} you recieved {dictionary.get('daily_points')} points today.")

你混合 dict 和 list ..

见下文

points = [{
    "callsign": "A001",
    "daily_points": 10,
    "number": "+447774076621"
}, {
    "callsign": "A002",
    "daily_points": 5,
    "number": "+447958708481"
}]

for point in points:
    print(
        f'Hi {point.get("callsign")} you received {point.get("daily_points")} points today.'
    )

输出

Hi A001 you received 10 points today.
Hi A002 you received 5 points today.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM