Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将列表中的两项作为key:pair添加到字典_Python_List_Dictionary_Append - Fatal编程技术网

Python:将列表中的两项作为key:pair添加到字典

Python:将列表中的两项作为key:pair添加到字典,python,list,dictionary,append,Python,List,Dictionary,Append,正在尝试将项列表作为键:值对转换为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 ran

正在尝试将项列表作为键:值对转换为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对。

您的代码应该适用于列表中偶数个元素,但当您有奇数个元素时,索引
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\u longest
fillvalue
来填充缺少的最后一个值:

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}

您的循环当前以列表的长度(
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]

您可以添加示例输入和预期输出吗?您的代码应该可以工作,但前提是
列表中的项目数为偶数。请确保是这样。你也可以做
dict(zip(a_-list[::2],a_-list[1::2])
@jdehesa这是一个非常简单的解决方案,只是想知道你能否解释一下分号
(a_-list[::2],a_-list[1::2])
,这样我就可以做我自己的进一步研究,充分了解那里发生了什么?干杯。@JoshQuinn是的,列表切片语法是
my_list[first:last:step]
first
默认为列表的开头,
last
为结尾,
step
为1。为您提供一个从
第一个
最后一个
(不包括)的新列表,包含
步骤中的1个
项目。还有更多的技巧(你可以有一步