2015-08-24 186 views
-1

我正在創建一個字典,如下所示,然後使用給定的鍵添加值。但我正在處理測序數據,一些數據需要輸入多次,而其他數據只能輸入一次。所以目前我在做這個:將多個值添加到python字典

my_dict = defaultdict(list) 
my_dict[seq].append(read_seq) 

字典那麼看起來是這樣的:

{'TTTT': ['AGTG', 'AGGG'], 'AAAA': ['AGAG', 'TGTG']}) 

我的問題是,我想兩個單獨字符串與每個鍵關聯,但只有當它們添加添加一個新的密鑰,然後再也不會。而這些應該是不同的,從上面顯示的值:

所以我想象這樣的事情,感謝:

{'TTTT': ['AGTG', 'AGGG'], ['string1'], ['string2'], 'AAAA': ['AGAG', 'TGTG'], ['string3'], ['string4']}) 
+1

'{'TTTT':['AGTG','AGGG'],['string1'],...'第一個元素是一個key:value對,第二個元素是一個正常的字符串項。 你不能有一個字典的一些條目作爲凱:配對值和一些正常字符串(沒有鍵的值)。 想想你希望再次獲取數據的結構。也許單獨使用字典和列表。 –

+3

首先,您的預期輸出不是有效的Python字典。其次,你應該解釋你如何通過例子來獲得預期的字典 –

+0

我認爲它不是。我可以嘗試澄清一下,但我很想看看是否有一種很好的方法可以將多個數據片段與一個關鍵字相關聯。 –

回答

2

如何保持一個元組或字典作爲主字典的價值?
所以不是這樣(這不能在python相當存在):

{'TTTT': ['AGTG', 'AGGG'], ['string1'], ['string2'], 'AAAA': ['AGAG', 'TGTG'], ['string3'], ['string4']}) 

您將獲得:

{'TTTT': (['AGTG', 'AGGG'], ['string1'], ['string2']), 'AAAA': (['AGAG', 'TGTG'], ['string3'], ['string4'])} 

這基本上意味着每一個關鍵3個元素的元組,第一個是你的列表和第二和第三是你的字符串。
要實現的是,定義defaultdict這樣:

my_dict = defaultdict(lambda:([], [], [])) 

然後使用你的字符串my_dict[0]原來的字符串列表,my_dict[1]my_dict[2]

,用於附加鍵/值對本字典的一個例子:

my_dict[seq][0].append(read_seq) 
#And now your two strings: 
my_dict[seq][1] = 'string1' 
my_dict[seq][1] = 'string2' 

如果你不想持有你的列表中的字符串(你可能不應該),你可以使用的字典instead.Then它看起來像:

{'TTTT': {'sequences':['AGTG', 'AGGG'], 'additional':('string1', 'string2')}, 'AAAA': {'sequences':['AGAG', 'TGTG'], 'additional':('string3', 'string4')}} 

這將使加入更爲清楚鍵/值:

my_dict = defaultdict(dict) 
#... 
my_dict[seq]['sequences'] = read_seq 
#And now your two strings: 
my_dict[seq]['additional'] = ('string1','string2') 

我個人更喜歡第二種選擇。

+0

這看起來不錯。但是,我如何向每個鍵添加數據? –

+0

@TheNightman剛剛添加的例子。 –

+0

在列表中保存字符串正是我想要的,所以謝謝。使用字典給我以下錯誤:TypeError:'list indices must be integers,not str' –