我目前有一本字典,其中的频道ID为键,并且列表中包含了来自该频道中所有视频ID的列表,如下所示:
channel_ids = {
'channel1_id': None,
'channel2_id': None
}
set_of_video_ids = [
'channel1_videoid1', 'channel1_videoid2',
'channel2_videoid1', 'channel2_videoid2'
]
我的目的是将每个频道的视频ID放在列表中,并将其添加为字典中键的值,看起来应该像这样
channel_ids = {
'channel1_id': [
'channel1_videoid1',
'channel1_videoid2'
]
'channel2_id': [
'channel2_videoid1',
'channel2_videoid2'
]
}
要尝试执行此操作,我首先通过创建一个函数将set_of_video_ids列表一分为二,然后添加了一个for循环以将其作为每个键的值。
for video_ids_per_channel in split_list(set_of_video_ids, number_of_parts = len(channel_ids.keys())):
for channel_id in channel_ids.keys():
channel_ids[channel_id] = video_ids_per_channel
print(channel_ids)
此外,分割后的video_ids_per_channel如下所示:
['channel1_video1', 'channel1_video2']
['channel2_video1', 'channel2_video2']
但是,当我打印字典以查看结果时,会得到如下所有可能的组合:
{
'channel1': [
'channel2_videoid1', 'channel2_videoid2'
],
'channel2': None
}
{
'channel1': [
'channel2_videoid1', 'channel2_videoid2
],
'channel2': [
'channel2_videoid1', 'channel2_videoid2
]
}
{
'channel1': [
'channel2_videoid1', 'channel2_videoid2
],
'channel2': [
'channel1_videoid1', 'channel1_videoid2
]
}
{
'channel1': [
'channel1_videoid1', 'channel1_videoid2
],
'channel2': [
'channel1_videoid1', 'channel1_videoid2
]
}
我怎样才能得到这个?
{
'channel1': [
'channel1_videoid1', 'channel1_videoid2
],
'channel2': [
'channel2_videoid1', 'channel2_videoid2
]
}
答案 0 :(得分:1)
列表理解和zip的组合。假设通道ID的名称分别为channel1和channel2。
vidlist = [[i for i in set_of_video_ids if j in i] for j in channel_ids]
mapped = zip(channel_ids,vidlist)
for k,r in mapped:
channel_ids.update({k:r})
答案 1 :(得分:0)
列表理解可以做到:
for k in channel_ids.keys():
channel_ids[k] = [v for v in set_of_video_ids if k.replace("_id","") in v]
我假设,在您的数组channel_ids
的元素(实际上没有设置,但有一个列表!)中,以不带结尾“ _id”的dictonairy set_of_video_ids
的键为子字符串。