如何打印嵌套字典的列表值



我创建了以下字典:

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循环:

for category in Book_list.values():
for ii, (name, status) in category.items():
if status == "available":
rs[ii] = status

用于理解解包表达式,如:

# _, category
# ii, (name, status)

你可以阅读这个链接。对于Python数据结构的一般介绍,我建议阅读文档。

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,xy在遍历(迭代)对象时取不同的值:

  • a:例如{1001: ['Pride and Prejudice', 'available'], 1002: ['Fahrenheit 451', 'available']}
  • x:例如1001
  • y:例如['Pride and Prejudice', 'available']
    • y[1]则为'available'

相关内容

  • 没有找到相关文章

最新更新