Использование Python 3.4, У меня есть следующие JSONПочему объект генератор получается вместо списка
mylist = [
{
"mdata": [
{
"url" : "http://fake1001/Standard",
"fmt" : "Standard"
},
{
"url" : "http://fake1001/Thumb",
"fmt" : "Thumb"
}
]
},
{
"mdata": [
{
"url" : "http://fake1002/Standard",
"fmt" : "Standard"
},
{
"url" : "http://fake1002/Large",
"fmt" : "Large"
}
]
},
{
"mdata": [
{
"url" : "http://fake1003/Thumb",
"fmt" : "Thumb"
},
{
"url" : "http://fake1003/Large",
"fmt" : "Large"
}
]
}
]
Я хочу поставить все URLs элементов с форматом «Стандарт» в списке:
urls = []
for m in mylist:
for md in m["mdata"]:
if md["fmt"] == "Standard":
urls.append(md["url"])
print(urls)
я получаю следующий результат:
['http://fake1001/Standard', 'http://fake1002/Standard']
Теперь, я попытался с помощью списка понимание делать ту же задачу:
urls2 = []
urls2.append(md["url"] for m in mylist for md in m["mdata"] if md["fmt"] == "Standard")
print(urls2)
Однако, я получаю объект генератора вместо:
[<generator object <genexpr> at 0x000000000860F510>]
Чтобы получить URLs, я могу назвать следующий() объекта генератора:
print(next(urls2[0]))
print(next(urls2[0]))
Что дает мне это :
http://fake1001/Standard
http://fake1002/Standard
Что я хочу знаете, почему понимание списка дает объект-генератор, и есть ли способ избежать этого?
Синтаксис списка понимания включает '[...] '. Кроме того, вы можете напрямую выполнить 'urls = [...]' – thefourtheye