2015-03-31 74 views
0

我经常处理异构数据集,并将它们作为我的python例程中的字典获取。我通常面临的问题是,我将添加到字典中的下一个条目的关键字已经存在。 我想知道是否存在更多的“Python化”的方式来做到以下任务:检查按键是否存在和创建/更新我的字典用于检查字典中是否存在密钥的“pythonic”策略

myDict = dict() 
for line in myDatasetFile: 
    if int(line[-1]) in myDict.keys(): 
     myDict[int(line[-1])].append([line[2],float(line[3])]) 
    else: 
     myDict[int(line[-1])] = [[line[2],float(line[3])]] 
+1

时髦两字是* Python的*。 – 2015-03-31 09:10:33

回答

7

使用defaultdict

from collections import defaultdict 

d = defaultdict(list) 

# Every time you try to access the value of a key that isn't in the dict yet, 
# d will call list with no arguments (producing an empty list), 
# store the result as the new value, and give you that. 

for line in myDatasetFile: 
    d[int(line[-1])].append([line[2],float(line[3])]) 

此外,从未使用thing in d.keys()。在Python 2中,它将创建一个键列表,并一次遍历一个项来查找键,而不是使用基于散列的查找。在Python 3中,它并不太可怕,但它仍然是多余的,并且仍然比正确的方式慢,即thing in d

0

尝试赶上Exception当你得到一个KeyError

myDict = dict() 
for line in myDatasetFile: 
    try: 
     myDict[int(line[-1])].append([line[2],float(line[3])]) 
    except KeyError: 
     myDict[int(line[-1])] = [[line[2],float(line[3])]] 
3

它是什么dict.setdefault是。

setdefault(key[, default])

如果关键是在字典中,返回其值。如果没有,则插入具有默认值的键并返回默认值。默认默认为None。

例如:

>>> d={} 
>>> d.setdefault('a',[]).append([1,2]) 
>>> d 
{'a': [[1, 2]]} 
-1

或使用:

myDict = dict() 
for line in myDatasetFile: 
    myDict.setdefault(int(line[-1]),[]).append([line[2],float(line[3])]) 
+0

卡斯拉约三分钟殴打你“setdefault”。我建议删除你的答案,因为它没有增加任何新东西。 – 2015-03-31 09:04:56

相关问题