在python中为现有键添加值

时间:2019-04-09 12:05:30

标签: python dictionary

我有一个列表:

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

3 个答案:

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