Python:将列表中的两项作为key:pair添加到字典
正在尝试将项列表作为键:值对转换为dict: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
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个
项目。还有更多的技巧(你可以有一步