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来处理。
你能帮我改进一下吗?
相关问题:
4 个回答
1
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']
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。
3
为什么不总是把“书架”映射成一个元素的列表呢?即使只有一个元素的情况下,也把它当作一个包含单个元素的列表?这样的话,你就可以始终以相同的方式对待每个书架了。
5
考虑到你的代码在处理只有一个项目的列表时会出错(我认为这样是对的),如果你真的不能改变你的数据结构,那么下面这个方法会更稳健一些,并且更符合逻辑:
def print_books(d):
if isinstance(d['shelf'], dict):
print d['shelf']['book']['title']
else:
for book in d['shelf']:
print book['book']['title']