也许问题有点模糊,但我的意思是这段代码:
'livestream' : [cow.legnames for cow in listofcows]
现在问题是cow.legnames也是一个列表,所以当我尝试用Json返回它时,我会在列表中得到一个列表。如何让它返回单个列表。
这是将要返回的json。
'livestream' : [['blue leg', 'red leg']]
我希望代码能解释我的问题。
答案 0 :(得分:9)
除了shahjapan的reduce之外,您还可以使用此语法来展平列表。
[legname for cow in listofcows for legname in cow.legnames]
答案 1 :(得分:2)
名称listofcows
暗示可能在遥远的未来可能有几头奶牛。使用多个项目展平列表列表是完全错误的。
但是,如果该名称具有误导性(为什么还有一个单一列表,那么就此而言?),你有几种方法可以将它弄平。
嵌套列表理解:[legname for cow in listofcows cow.legnames for legname in cow.legnames]
获取第一项:[your list comprehension][0]
很可能是我现在不记得的标准库中的一些有用的东西。
答案 2 :(得分:1)
根据我的理解,你有类似的东西:
class Cow(object):
def __init__(self, legnames):
self.legnames = legnames
listofcows = [Cow(['Red Leg', 'Blue Leg']),
Cow(['Green Leg', 'Red Leg'])]
最简单的扩展临时列表,如下所示:
legs = []
# As @delnan noted, its generally a bad idea to use a list
# comprehension to modify something else, so use a for loop
# instead.
for cow in listofcows:
legs.extend(cow.legnames)
# Now use the temporary legs list...
print {'livestream':legs}
答案 3 :(得分:0)
这是你要找的吗?
'livestream' : [cow.legnames[0] for cow in listofcows]
答案 4 :(得分:0)
你可以尝试减少,
'livestream' : reduce(lambda a,b:a+b,[cow.legs for cow in listofcows])
如果你需要独特的腿使用套装
'livestream' :list(set(reduce(lambda a,b:a+b,[cow.legs for cow in listofcows])))