python - 如何使用 for 循环遍历 LIST 中的嵌套字典
问题描述
我想使用 for 循环提取每个字典的第二个键。但是,字典嵌套在一个列表中(见下文)。另外,请注意第二个键并不总是相同的。
video_Ids = [
{'kind': 'youtube#playlist',
'playlistId': 'PLt1O6njsCRR-D_1jUAhJrrDZyYL6OZSGa'},
{'kind': 'youtube#playlist',
'playlistId': 'PLt1O6njsCRR_8oi7E6qnPWGQbn8NoQ6sG'},
{'kind': 'youtube#channel', 'channelId': 'UC4i5R6-IW05iiU8Vu__vppA'},
{'kind': 'youtube#video', 'videoId': 'XquM0L2WUio'},
{'kind': 'youtube#video', 'videoId': '05yrGVZ96b4'}
]
我尝试了不同的东西,但到目前为止都没有奏效。这是我的最后一次尝试:删除要留下的第一个键,并列出包含第二个键的列表。
for i in video_Ids:
if video_Ids["kind"] == "youtube#video":
del video_Ids[i]["kind"]
elif video_Ids[i]["kind"] == "youtube#playlist":
del video_Ids[i]["kind"]
elif video_Ids[i]["kind"] == "youtube#channel":
del video_Ids[i]["kind"]
这是我收到的信息:
TypeError: list indices must be integers or slices, not str
我尽了最大的努力,现在被困了几天。我真的很感激任何帮助,谢谢。
解决方案
一旦有了字典,就不需要使用索引:
for video in video_Ids:
if video["kind"] == "youtube#video":
del video["kind"]
elif video["kind"] == "youtube#playlist":
del video["kind"]
elif video["kind"] == "youtube#channel":
del video["kind"]
要提取第二个键,您需要迭代每个字典。例如:
from itertools import islice
secondKeys = [ {k:v} for d in video_Ids for k,v in islice(d.items(),1,2)]
# or without itertools ...
secondKeys = [ {k:v} for d in video_Ids for _,(k,v),*_ in [d.items()]]
print(secondKeys)
[{'playlistId': 'PLt1O6njsCRR-D_1jUAhJrrDZyYL6OZSGa'},
{'playlistId': 'PLt1O6njsCRR_8oi7E6qnPWGQbn8NoQ6sG'},
{'channelId': 'UC4i5R6-IW05iiU8Vu__vppA'},
{'videoId': 'XquM0L2WUio'},
{'videoId': '05yrGVZ96b4'}]
或者,如果您只想要键而不是相应的值:
from itertools import islice
secondKeys = [ k for d in video_Ids for k in islice(d,1,2)]
# or without itertools ...
secondKeys = [ k for d in video_Ids for _,k,*_ in [d]]
print(secondKeys)
['playlistId', 'playlistId', 'channelId', 'videoId', 'videoId']
推荐阅读
- c++ - 如何使用 decltype 获取没有引用的指针?
- python - 无法使用 Subprocess Popen 为应用程序启动 Instruments 'Time Profiler'
- javascript - 如何使用 javascript 创建图像和文本的搜索栏
- spring - Spring Batch Partitions Join 覆盖 RowMapper 值,因此得到单个数组而不是多个
- java - 如何检查用户输入是java中的float还是int?
- java - 工具栏幻灯片动画中的后退箭头不起作用
- java - 在java中以正确的方式获取“百分比哈希码”
- node.js - 使用 fluent-ffmpeg 添加背景音乐
- xml - 如何在不使用 OpenSAML Jar 的情况下解析 SAML 2.0 响应
- sql - 尝试将 SQL 查询的值分配给变量 SET