很抱歉,如果这可能是非常微不足道的,但由于某种原因,我很难访问这个加载的数据结构的元素。
我正在使用谷歌的地方API在Python的一堆位置,所以我有一个地方的列表。从本质上讲,我试图删除所有没有place_id的条目。这就是我的对象的样子:
[{'candidates': [], 'status': 'ZERO_RESULTS'},
{'candidates': [{'place_id': 'ChIJ2YPts0rGUIYRHZkmh8TxBT4'}], 'status': 'OK'},
{'candidates': [], 'status': 'ZERO_RESULTS'},
{'candidates': [{'place_id': 'ChIJ9_uV17leXIYRgQc7NludRdw'}], 'status': 'OK'},
{'candidates': [], 'status': 'ZERO_RESULTS'},
{'candidates': [{'place_id': 'ChIJWVukvUKvw4cRFGFVXGHNX9A'}], 'status': 'OK'},
{'candidates': [{'place_id': 'ChIJ1VXMS8i_9YgR6NTQL_9BKMs'}], 'status': 'OK'},
{'candidates': [{'place_id': 'ChIJ79Q4K1YAQIgRe-WjYCw9MuM'}], 'status': 'OK'},
{'candidates': [{'place_id': 'ChIJ8WoxTJ7qQIYRDZX5JBrofUw'}], 'status': 'OK'},
{'candidates': [], 'status': 'ZERO_RESULTS'}]
I tried doing this:
{place_id: v for place_id, v in place_id.items() if v}
但是我得到这个错误:
AttributeError: 'list' object has no attribute 'items'
我知道对象是一个列表,但我不知道如何访问列表中的字典,因此我只选择具有place_id的对象。谁能告诉我如何过滤对象?
谢谢
您可以使用列表推导式。如果lst
是问题中的列表,则:
out = [d for d in lst if any("place_id" in v for v in d["candidates"])]
print(out)
打印:
[
{
"candidates": [{"place_id": "ChIJ2YPts0rGUIYRHZkmh8TxBT4"}],
"status": "OK",
},
{
"candidates": [{"place_id": "ChIJ9_uV17leXIYRgQc7NludRdw"}],
"status": "OK",
},
{
"candidates": [{"place_id": "ChIJWVukvUKvw4cRFGFVXGHNX9A"}],
"status": "OK",
},
{
"candidates": [{"place_id": "ChIJ1VXMS8i_9YgR6NTQL_9BKMs"}],
"status": "OK",
},
{
"candidates": [{"place_id": "ChIJ79Q4K1YAQIgRe-WjYCw9MuM"}],
"status": "OK",
},
{
"candidates": [{"place_id": "ChIJ8WoxTJ7qQIYRDZX5JBrofUw"}],
"status": "OK",
},
]
编辑:要获得保留索引的向量+输出列表,您可以执行:
preserved_indices, out = map(
list,
zip(
*[
(idx, d)
for idx, d in enumerate(lst)
if any("place_id" in v for v in d["candidates"])
]
),
)
print(preserved_indices)
print(out)