遍历字典列表并打印消息



我有一个类似于下面的字典列表:

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的保留顺序,你可以保留你的大部分代码,只是用map(dict.values, points)替换points.items():

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.

最简单的解决方案如下:

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

你的解决方案是错误的,因为list没有方法items(),它不能像那样解包字典键。

问题是您正在迭代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 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.")

你把字典和列表混在一起了。

见下文

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.

最新更新