以下功能收到以下列表:
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]}
我做错了什么?
由于
答案 0 :(得分:1)
dict.fromkeys
为每个密钥使用相同的列表。你需要单独的名单;你应该使用词典理解。
Dc={subject: [] for subject in teacherd.values()}
答案 1 :(得分:0)