如何将项目从列表移动到字典

时间:2018-02-07 23:32:01

标签: python list dictionary

我正在尝试将列表中的项目移动到字典中但是我收到以下错误:

  

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

我将如何改变它?

3 个答案:

答案 0 :(得分:1)

为什么会出错?

在Python中,该错误通常意味着“您无法对此对象进行切片”。字符串,列表,元组等是可切片的,但整数不是可切片的。迭代期间会出现错误,因为它遇到整数。

选项

根据您想要的结果,可以尝试以下选项:

  1. 预处理您的输入,例如成对列表[('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5), ('six', 6)]
  2. 删除不兼容的索引。
  3. 使用工具从对中构建字典,例如pip install more_itertools
  4. 解决方案

    我怀疑你想要的结果类似于选项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.defaultdictdict的子类。这会将任何键的默认值设置为空列表,并允许您轻松追加。以下是您正在寻找的猜测:

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