我创建了以下字典:
Book_list={
'Fiction': {1001: ['Pride and Prejudice', 'available'],
1002: ['Fahrenheit 451', 'available']},
'Horror': {2001: ['House of leaves', 'available'],
2002: ['The Shinking', 'available']}}
现在我想存储状态"available">
所以我的意思是输出像:
status={1001:available,1002:available,2001:available,2002:available}
请告诉我如何得到这个输出。
一种方法是使用字典推导式:
rs = {ii : status for category in Book_list.values() for ii, (name, status) in category.items() if status == "available"}
print(rs)
{1001: 'available', 1002: 'available', 2001: 'available', 2002: 'available'}
上面的等价于以下嵌套的for循环: 用于理解解包表达式,如: 你可以阅读这个链接。对于Python数据结构的一般介绍,我建议阅读文档。for category in Book_list.values():
for ii, (name, status) in category.items():
if status == "available":
rs[ii] = status
# _, category
# ii, (name, status)
def receive_available_books(Book_list):
status = {}
for cat in Book_list.values():
for code, book in cat.items():
status[code] = book[1]
return status
输出:{1001: 'available', 1002: 'available', 2001: 'available', 2002: 'available'}
使用Python 3.10的结构模式匹配,可能不是超级合适/对此有帮助,但我只是想尝试一下:-)
rs = {}
for category in Book_list.values():
for item in category.items():
match item:
case ii, [_, 'available' as status]:
rs[ii] = status
(代码改编自Dani的)
使用这段代码,您几乎可以得到您想要的输出:
d={}
for a in Book_list.values():
for x,y in a.items():
d[x]=y[1]
print("status=", d)
当然,您也可以将d
赋值给您的astatus
变量。
这段代码只是首先创建一个空的d
作为字典,然后用数据填充它,最后打印它。要用数据填充d
,a
,x
和y
在遍历(迭代)对象时取不同的值:
a
:例如{1001: ['Pride and Prejudice', 'available'], 1002: ['Fahrenheit 451', 'available']}
x
:例如1001
y
:例如['Pride and Prejudice', 'available']
y[1]
则为'available'