通过键将项添加到python字典

时间:2017-05-05 13:56:15

标签: python dictionary

以下功能收到以下列表:

L1= [[12345,75,'English'],
         [23452,83,'Physics'],
         [23560,81,'Statistics'],
         [23415,61,'Computer'],
         [23459,90,'Physics'],    
         [12345,75,'Computer'],
         [23452,100,'Statistics']]

L2= [['a','English'],
           ['b','Physics'],
           ['c','Computer'],
           ['d','Statistics'],
           ['e','Philosophy']]

功能:

    def TeachMarks (L1, L2):
        teacherd=dict(L2)   #key- teacher name, value- subject
        Dc=dict.fromkeys(teacherd.values(),[]) #key-subj, value- empty list

        for i in L1:
           subj=i[2]
           Dc[subj].append(i[0])

         print '\n'
         print Dc

L1中的每个内部列表都具有[2]位置的主题。 字典(Dc)的每个键都是一个主题,它的值是一个空列表。 该函数应该采用内部列表中的第一个元素并将其添加到列表中,该列表是字典中相关主题的值。

但是当我运行它时,它实际上将每个内部列表的第一个元素(L1)添加到每个值中。这是输出:

{'Statistics': [12345, 23452, 23560, 23415, 23459, 12345, 23452], 'Philosophy': [12345, 23452, 23560, 23415, 23459, 12345, 23452], 'Computer': [12345, 23452, 23560, 23415, 23459, 12345, 23452], 'Physics': [12345, 23452, 23560, 23415, 23459, 12345, 23452], 'English': [12345, 23452, 23560, 23415, 23459, 12345, 23452]}

我做错了什么?

由于

2 个答案:

答案 0 :(得分:1)

dict.fromkeys为每个密钥使用相同的列表。你需要单独的名单;你应该使用词典理解。

Dc={subject: [] for subject in teacherd.values()}

答案 1 :(得分:0)

您为每个密钥重复使用相同的空列表。

您可以使用defaultdict。这需要为每个新密钥调用一个工厂函数。传递Flat,它会调用list来创建缺失的密钥:

list()