Python:在字典中获取与键相关联的所有值,其中的值可以是列表或单个项

2024-06-06 16:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找字典中与键相关联的所有值。有时钥匙里只有一本字典,有时是一个字典列表。

a = {
  'shelf':{
    'book':{'title':'the catcher in the rye', 'author':'j d salinger'}
  }
}  

b = {
  'shelf':[
    {'book':{'title':'kafka on the shore', 'author':'haruki murakami'}},
    {'book':{'title':'atomised', 'author':'michel houellebecq'}}
  ]    
}

这是我读书架上每本书的书名的方法。

def print_books(d):
  if(len(d['shelf']) == 1):
    print d['shelf']['book']['title']
  else:
    for book in d['shelf']:
      print book['book']['title']

它很管用,但看起来不整洁,也不像Python。for循环在单值情况下失败,因此是if/else。

你能改进一下吗?


Tags: thein列表forif字典titleelse
3条回答
def print_books(d):
    container = d['shelf']
    books = container if isinstance(container, list) else [container['book']]
    books = [ e['book'] for e in books ] 
    for book in books:
        print book['title']

如果你有一个包含一个项目的列表(我认为应该是这样的),那么你的代码就会中断,如果你真的不能改变你的数据结构,那么这个列表会更健壮一些,逻辑也更合理一些:

def print_books(d):
    if isinstance(d['shelf'], dict):
        print d['shelf']['book']['title']
    else:
        for book in d['shelf']:
            print book['book']['title']

为什么不总是让“shelf”映射到元素列表,但在单个元素的情况下,它是。。。单元素列表?这样你就可以对每个书架一视同仁了。

相关问题 更多 >