2015-03-31 71 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

相關問題