首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从返回列表列表的列表理解中获取简单列表

如何从返回列表列表的列表理解中获取简单列表
EN

Stack Overflow用户
提问于 2014-08-28 22:43:48
回答 3查看 53关注 0票数 0

守则如下:

代码语言:javascript
复制
spices={
'Animals':{1:'Bison', 2:'Panther', 3:'Elephant'},      
'Birds':{1:'Duck', 2:'Hawk', 3:'Pigeon'}, 
'Fish':{1:'Shark', 2:'Salmon', 3:'Piranha'}
}

result=[spices[specie].values() for specie in spices]
print result

清单的结果:

代码语言:javascript
复制
[['Shark', 'Salmon', 'Piranha'], ['Bison', 'Panther', 'Elephant'], ['Duck', 'Hawk', 'Pigeon']]

但我的目标是得到一个简单的列表,如:

代码语言:javascript
复制
['Shark', 'Salmon', 'Piranha', 'Bison', 'Panther', 'Elephant', 'Duck', 'Hawk', 'Pigeon'] 

如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-28 22:44:59

在列表理解中添加一个循环;嵌套循环从左到右运行:

代码语言:javascript
复制
[v for specie in spices for v in spices[specie].values()]

演示:

代码语言:javascript
复制
>>> spices={
... 'Animals':{1:'Bison', 2:'Panther', 3:'Elephant'},      
... 'Birds':{1:'Duck', 2:'Hawk', 3:'Pigeon'}, 
... 'Fish':{1:'Shark', 2:'Salmon', 3:'Piranha'}
... }
>>> [v for specie in spices for v in spices[specie].values()]
['Shark', 'Salmon', 'Piranha', 'Bison', 'Panther', 'Elephant', 'Duck', 'Hawk', 'Pigeon']
票数 4
EN

Stack Overflow用户

发布于 2014-08-28 23:18:28

我只想提及另一种方法:

代码语言:javascript
复制
print reduce(lambda x, y: x + y, map(lambda x: x.values(), spices.values()))

输出:

代码语言:javascript
复制
['Shark', 'Salmon', 'Piranha', 'Bison', 'Panther', 'Elephant', 'Duck', 'Hawk', 'Pigeon']

解释(从右到左):

  • 取外字典的所有values
  • 通过values和自定义lambda函数提取每个嵌套字典的lambda
  • 通过reduce和另一个自定义lambda函数连接所有值。
票数 1
EN

Stack Overflow用户

发布于 2014-08-28 22:47:32

您可以使用itertools.chain

代码语言:javascript
复制
from itertools import chain
spices={
'Animals':{1:'Bison', 2:'Panther', 3:'Elephant'},
'Birds':{1:'Duck', 2:'Hawk', 3:'Pigeon'},
'Fish':{1:'Shark', 2:'Salmon', 3:'Piranha'}
}

print list(chain.from_iterable(spices[specie].values() for specie in spices))
['Shark', 'Salmon', 'Piranha', 'Bison', 'Panther', 'Elephant', 'Duck', 'Hawk', 'Pigeon']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25559154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档