将列表中的值输入到空字典Python

时间:2019-10-17 19:16:35

标签: python dictionary

我正在尝试将列表中的值输入到一个空字典中,但是我不断收到错误消息,而且我不知道自己做错了什么。

我的列表lst如下:

[[123,456],
[123,123],
[123,567],
[234,344],
[234,345],
[234,988]...]

我被要求首先创建一个空字典,其中包含lst中的第一个数字(看起来像123:[],234:[]),然后在列表中的第一个数字之后输入第二个数字。字典,字典应该看起来像{123:[456,567],234:[344,345,988]...}(如果第一个数字等于第二个数字,则不应包括第二个数字)

我创建了一个空字典,然后使用以下代码打印数字的字典值:

dic = dict((i, []) for i in lst)

for key, value in dic.items():
    if key in lst:
        print(key, ":", value)

当我尝试使用以下代码将lst中的值放入字典中时:

for w in lst:
    if w[0] in dic.keys() and w[0] != w[1]:
        dic[w[0]].append(w[1])

lst2 = []
for a in lst[0:10]:
    lst2.append(dic[a])
print(lst2)

我在下面收到一条错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-135-610d94e48548> in <module>
      8 
      9 for w in idList:
---> 10     if w[0] in dic.keys() and w[0] != w[1]:
     11         dic[w[0]].append(w[1])
     12 

TypeError: 'int' object is not subscriptable

有人知道那里发生了什么吗,我该如何解决?

非常感谢!

3 个答案:

答案 0 :(得分:0)

最接近您的解决方案:

dic = {i[0]: [] for i in lst}

for w in lst:
    if w[0] != w[1] 
        dic[w[0]].append(w[1])

注意。要更第一步,您可以使用defaultdict和groupby作为第二个How do I use Python's itertools.groupby()?

答案 1 :(得分:0)

l = [[123,456],
[123,123],
[123,567],
[234,344],
[234,345],
[234,988]]

dic = {} #empty dictionary

# creating dictionary with inner list first element as key and value as list
for i in l:
    dic.update({i[0]:[]})

# adding the second value to the corresponding key in list
for i in l:
    dic[i[0]].append(i[1])


print(dic)

输出

{123: [456, 123, 567], 234: [344, 345, 988]}

答案 2 :(得分:0)

lst = [[123,456],[123,123],[123,567],[234,344],[234,345],[234,988]]

dic = dict((i[0], []) for i in lst)

for i in lst:
   if i[0] != i[1]:
       dic[i[0]].append(i[1])