我正在尝试将列表中的项目移动到字典中但是我收到以下错误:
'int'对象不可订阅
这是我的代码:
l_s = ['one', 1, 'two', 2, 'three', 3, 'four', 4, 'five', 5, 'six', 6]
d = {}
for line in l_s:
if line[0] in d:
d[line[0]].append(line[1])
else:
d[line[0]] = [line[1]]
print(d)
我将如何改变它?
答案 0 :(得分:1)
为什么会出错?
在Python中,该错误通常意味着“您无法对此对象进行切片”。字符串,列表,元组等是可切片的,但整数不是可切片的。迭代期间会出现错误,因为它遇到整数。
选项的
根据您想要的结果,可以尝试以下选项:
[('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5), ('six', 6)]
。pip install more_itertools
。解决方案
我怀疑你想要的结果类似于选项3:
import more_itertools as mit
lst = ['one', 1, 'two', 2, 'three', 3, 'four', 4, 'five', 5, 'six', 6]
{k: v for k, v in mit.sliced(lst, 2)}
# {'five': 5, 'four': 4, 'one': 1, 'six': 6, 'three': 3, 'two': 2}
答案 1 :(得分:1)
这样的东西?
使用Way to iterate two items at a time in a list?和词典理解:
>> l_s = ['one', 1, 'two', 2, 'three', 3, 'four', 4, 'five', 5, 'six', 6]
>>> {k:v for k, v in zip(*[iter(l_s)]*2)}
{'six': 6, 'three': 3, 'two': 2, 'four': 4, 'five': 5, 'one': 1}
答案 2 :(得分:0)
使用collections.defaultdict
,dict
的子类。这会将任何键的默认值设置为空列表,并允许您轻松追加。以下是您正在寻找的猜测:
from collections import defaultdict
l_s = ['one', 1, 'two', 2, 'three', 3, 'four', 4, 'five', 5, 'six', 6]
d = defaultdict(list)
for txt, num in zip(l_s[::2], l_s[1::2]):
d[txt].append(num)
# defaultdict(list,
# {'five': [5],
# 'four': [4],
# 'one': [1],
# 'six': [6],
# 'three': [3],
# 'two': [2]})