【问题标题】:How to add a list from a for loop to each key in a dictionary?如何将 for 循环中的列表添加到字典中的每个键?
【发布时间】:2020-02-28 09:18:45
【问题描述】:

我目前有一个以频道 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
    ]
}

【问题讨论】:

  • 将您的print(... 移出循环
  • @stovfl 将打印移出两个 for 循环仅将 channel_1_videoids 作为每个键的值

标签: python list loops dictionary discord.py


【解决方案1】:

这里是列表理解和 zip 的组合。假设频道 ID 的名称为频道 1 和频道 2。

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})

【讨论】:

  • 这非常有效!虽然我不得不用 video_ids_per_channel 替换 vidlist。谢谢!!
【解决方案2】:

列表推导可以做到:

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

我假设,没有结尾“_id”的字典 channel_ids 的键在您的数组 set_of_video_ids 的元素中作为子字符串找到(实际上没有集合,而是一个列表!)

【讨论】:

  • 我观察到 set_of_video_ids 实际上没有设置或数组。这是列表:-)
  • 大声笑,谢谢,我总是混淆数组和列表。但可以肯定的是,它不是一套。
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2020-04-03
  • 2013-09-28
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多