如何从for循环向字典中的每个键添加列表?

时间:2019-11-02 10:00:16

标签: python list loops dictionary discord.py

我目前有一本字典,其中的频道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
    ]
}

2 个答案:

答案 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的键为子字符串。