在字典中为一个键追加多个值

2024-04-20 08:01:44 发布

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

我是python新手,每年都有一个年份和值的列表。我要做的是检查字典中是否已经存在年份,如果存在,则将该值附加到特定键的值列表中。

例如,我有一个年份列表,每年有一个值:

2010  
2  
2009  
4  
1989  
8  
2009  
7  

我想做的是用年份作为键,那些个位数作为值填充字典。但是,如果2009年我列出了两次,我希望将第二个值附加到字典中的值列表中,因此我希望:

2010: 2  
2009: 4, 7  
1989: 8  

现在我有以下几点:

d = dict()  
years = []  

(get 2 column list of years and values)

for line in list:    
    year = line[0]   
    value = line[1]  

for line in list:  
    if year in d.keys():  
        d[value].append(value)  
    else:  
        d[value] = value  
        d[year] = year  

Tags: in列表forget字典valuelinecolumn
2条回答

您可以使用setdefault

for line in list:  
    d.setdefault(year, []).append(value)

这是因为setdefault返回列表并在字典上设置它,而且由于列表是可变的,因此追加到setdefault返回的版本与追加到字典本身的版本相同。如果这有任何意义的话。

最好使用^{}(在Python 2.5中添加)。这允许您指定缺少键的默认对象类型(例如list)。

因此,如果一个键不存在,就不要创建它,然后将它附加到键的值上,而是去掉中间人,直接附加到不存在的键上,以获得所需的结果。

使用数据的快速示例:

>>> from collections import defaultdict
>>> data = [(2010, 2), (2009, 4), (1989, 8), (2009, 7)]
>>> d = defaultdict(list)
>>> d
defaultdict(<type 'list'>, {})
>>> for year, month in data:
...     d[year].append(month)
... 
>>> d
defaultdict(<type 'list'>, {2009: [4, 7], 2010: [2], 1989: [8]})

这样你就不用担心你是否见过一个与一年相关的数字。您只需附加并忘记,知道丢失的密钥将始终是一个列表。如果密钥已经存在,则它将被附加到。

相关问题 更多 >