Python:将列表中的两个项目作为key:pair加入字典

时间:2019-07-11 16:19:01

标签: python list dictionary append

尝试将作为key:value对的项目列表转换为dict:

def make_dict(a_list, category_name):

    a_dict = {}


    for i in range(0, len(a_list), 2):
        a_dict[a_list[i]] = a_list[i+1]
    return a_dict

遇到此错误:

a_dict[a_list[i]] = a_list[i+1]
IndexError: list index out of range

我了解原因,但不确定如何解决。有什么办法吗?

此外,它会在超出范围之前收集key:value对。

2 个答案:

答案 0 :(得分:1)

您的代码应为列表中的偶数个元素工作,但是当元素的数量为奇数时,索引i+1处的元素不存在,因此会出错。

您也可以在同一个迭代器上zip以使用dict理解将成对的连续值作为对使用:

In [239]: lst = [1, 2, 3, 4, 5, 6]                                                                                                                                                                          

In [240]: {k: v for k, v in zip(*[iter(l)] * 2)}                                                                                                                                                            
Out[240]: {1: 2, 3: 4, 5: 6}

对于奇数个元素,可以将itertools.zip_longestfillvalue一起使用以填写缺少的最后一个值:

In [241]: lst = [1, 2, 3, 4, 5, 6, 7]                                                                                                                                                                       

In [242]: {k: v for k, v in itertools.zip_longest(*[iter(l)] * 2, fillvalue=None)}                                                                                                                          
Out[242]: {1: 2, 3: 4, 5: 6, 7: None}

答案 1 :(得分:0)

您的循环当前以列表的长度(len(a_list))结尾,但是以该长度值调用索引会破坏它。只需修复循环即可尽早停止运行:

    for i in range(0, len(a_list)-1, 2): #subtract 1 from length!
        a_dict[a_list[i]] = a_list[i+1]