按键向python字典添加项

2024-10-01 05:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的函数接收以下列表:

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

我做错什么了?你知道吗

谢谢


Tags: key函数l1主题列表englishdcdict
2条回答

对每个键重复使用相同的空列表。你知道吗

你可以用^{}。这需要为每个新键调用一个工厂函数。传递它list,它将调用list()来创建缺少的键:

from collections import defaultdict

def TeachMarks(L1):
    Dc = defaultdict(list)

    for value, _, subject in L1:
       Dc[subject].append(value)

dict.fromkeys对每个键使用相同的列表。你需要单独的清单,你应该使用听写理解。你知道吗

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

相关问题 更多 >