我有一个列表:
Marks =[
[12345,75,'English'],
[23452,83,'Physics'],
[23560,81,'Statistics'],
[23415,61,'Computer'],
[23459,90,'Physics'],
[12345,75,'Computer'],
[23452,100,'Statistics']
]
,我想制作一个字典,其中的类名是键,而这两个 数字是值。 我可以像这样制作初始词典:
for i in list1:
dict1[i[2]]=i[0],i[1]
但是,当我打印字典时,仅打印关联的数字对中的每对数字。我正在寻找这样的结果:
{
'English' : [[12345,75]],
'Physics' : [[23452,83], [23459,90]],
'Statistics' : [[23560,81], [23452,100]],
'Computer' : [[23415,61], [12345,75]]
}
有什么方法可以扩展与键关联的值?
我尝试过:
if i[2] in dict1:
dict1.extend
答案 0 :(得分:2)
使用collections.defaultdict
例如:
from collections import defaultdict
Marks = [[12345,75,'English'], [23452,83,'Physics'], [23560,81,'Statistics'], [23415,61,'Computer'], [23459,90,'Physics'], [12345,75,'Computer'], [23452,100,'Statistics']]
result = defaultdict(list)
for i in Marks:
result[i[-1]].append(i[:2])
print(result)
输出:
defaultdict(<type 'list'>, {'Statistics': [[23560, 81], [23452, 100]], 'Physics': [[23452, 83], [23459, 90]], 'Computer': [[23415, 61], [12345, 75]], 'English': [[12345, 75]]})
答案 1 :(得分:1)
您的字典中的键只能有一个值。但是您可以将两个值另存为列表或元组,如下所示:
for i in list1:
dict1[i[2]]=i[0:1]
或
for i in list1:
dict1[i[2]]=(i[0], i[1])
答案 2 :(得分:1)
您可以使用理解力轻松实现这一目标:
>>> Marks = [[12345,75,'English'], [23452,83,'Physics'], [23560,81,'Statistics'], [23415,61,'Computer'], [23459,90,'Physics'], [12345,75,'Computer'], [23452,100,'Statistics']]
>>> d = { m[2]: [m[0], m[1]] for m in Marks }
>>> d
{'English': [12345, 75], 'Physics': [23459, 90], 'Statistics': [23452, 100], 'Computer': [12345, 75]}
>>>
编辑:这将考虑那些重复的键来创建字典。
d = {}
for mark in Marks:
if not mark[2] in d:
d[mark[2]] = [[mark[0], mark[1]]]
else:
d[mark[2]] += [[mark[0], mark[1]]]
字典将以以下形状结束:
>>> d
{'English': [[12345, 75]], 'Physics': [[23452, 83], [23459, 90]], 'Statistics': [[23560, 81], [23452, 100]], 'Computer': [[23415, 61], [12345, 75]]}
>>>