Как добавить список из цикла for для каждого ключа в словаре? - PullRequest
0 голосов
/ 02 ноября 2019

В настоящее время у меня есть словарь с идентификаторами каналов в качестве ключей и список полных идентификаторов видео из каналов в словаре, который выглядит следующим образом:

channel_ids = {
        'channel1_id': None, 
        'channel2_id': None
        }

set_of_video_ids = [
            'channel1_videoid1', 'channel1_videoid2', 
            'channel2_videoid1', 'channel2_videoid2'
            ]

Мое намерение для этого состоит в размещении идентификатора видео каждого каналав список и добавить его в качестве значения для ключа в словаре, который должен выглядеть следующим образом

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 ]

1 голос
/ 02 ноября 2019

Сочетание понимания списка и почтового индекса здесь. Предполагая имена идентификаторов каналов как 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})
0 голосов
/ 02 ноября 2019

Понимание списка может сделать это:

for k in channel_ids.keys():
    channel_ids[k] = [v for v in set_of_video_ids if k.replace("_id","") in v]

Я предполагаю, что ключи dictonairy channel_ids без окончания "_id" найдены как подстрока в элементе вашего массива set_of_video_ids(что на самом деле не набор, но список!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...