我有以下嵌套列表:
items = [
[{'URL': '1234', 'ID': 1}, {'URL': '2222', 'ID': 2}],
[{'URL': '12344321', 'ID': 2}]
]
我如何获得所有网址?
到目前为止,我已经尝试过:
urls = [i['URL'] for i in item for item in items]
答案 0 :(得分:5)
items = [
[{'URL': '1234'}, {'ID': 1}],
[{'URL': '12344321'}, {'ID': 2}]
]
print [i[0]['URL'] for i in items]
获取密钥URL
如果您可以在单个列表中使用多个词典
print [j['URL'] for i in items for j in i]
答案 1 :(得分:2)
分步思考。首先,你想要展平你的外部名单
[d for lst in items for d in lst]
# same order as if you wrote it out in a `for` loop
# for lst in items:
# for d in lst:
# yield d
这将为您提供所有词典的单一列表。然后,您希望将值与每个词典中的键"URL"
绑定。您知道可以使用[key]
语法执行此操作,因此只需在列表comp。
[d["URL"] for lst in items for d in lst]
如果其中一些词典可能没有"URL"
键,那么您可以在末尾应用过滤器
[d["URL"] for lst in items for d in lst if "URL" in d]
答案 2 :(得分:1)
如果你喜欢功能:
items = [
[{'URL': '1234', 'ID': 1}, {'URL': '2222', 'ID': 2}],
[{'URL': '12344321', 'ID': 2}]
]
from operator import itemgetter
from itertools import chain
print(list(map(itemgetter("URL"), chain.from_iterable(items))))
['1234', '2222', '12344321']
chain.from_iterable(items)
相当于使用for for循环展平列表列表,map(itemgetter("URL")
只从每个dicts中提取每个URL
值。
你自己的代码失败只是因为你的逻辑向后,主要的可迭代的首先出现然后每个子列表上的for,否则你试图迭代尚未定义的东西给你{{1 }}:
NameError