我有這樣一個字典:轉換字典值轉換爲一組,同時保留字典
(100002:「蘋果」,100004:「香蕉」,100005:「胡蘿蔔」)
我想使我的字典爲鍵(如它現在所做的那樣)輸入值,但是爲值設置了值(而不是現在的字符串)。我的目標是能夠從一個.csv文件中讀取關鍵字的一列(一個是物品ID號的int),然後是大小,形狀和顏色等列。我想將這些信息添加到我的字典中,以便只添加字典中已有字符的信息。
我的目標字典可能是這樣的:
(100002: set(['APPLE','MEDIUM','ROUND','RED']), 100004: set(['Banana','MEDIUM','LONG','YELLOW']), 100005: set(['CARROT','MEDIUM','LONG','ORANGE'])
我只是鍵+字符串的字典的項目名稱開始,我想這樣的代碼在從.csv文件中讀取額外的信息:
infile = open('FileWithTheData.csv', 'r')
for line in infile.readlines():
spl_line = line.split(',')
if int(spl_line[0]) in MyDict.keys():
MyDict[int(spl_line[0])].update(spl_line[1:])
不幸的是,這個錯誤說出AttributeError: 'str' object has no attribute 'update'
。我試圖將字典的值更改爲集,以便我可以更新它們,例如:(100002: set(['A','P','L','E']), 100004: set(['B','A','N']), 100005: set(['C','A','R','O','T']))
我想將值轉換爲一個集,以便當前值的字符串將作爲第一個字符串設置而不是將字符串分解爲字母並製作一組這些字母。
我也嘗試了通過將兩個列表壓縮在一起來創建字典,但似乎沒有任何區別,從而使值成爲一組。像這樣的 MyDict = dict(listofkeys,set(listofnames))) 仍然使整個listofnames列表成爲一個集合,但它沒有實現我的目標,即將MyDict中的每個值變成一個集合, listofnames作爲集合中的第一個字符串。
如何將MyDict中的值設置爲一個集合,以便我可以將其他字符串添加到該集合中,而無需將當前字典中的值轉換爲一組單個字母?
編輯: 我目前通過使用一個函數來生成項目標識符(這是鍵)的列表和另一個函數查找這些項目標識符以生成相應項目名稱的列表(使用兩列.csv文件作爲數據源),然後將它們結合在一起。
答案: 使用這裏的建議我想出了這個解決方案。我發現set())。update的部分可以很容易地更改爲list())。append可以產生一個列表而不是一個集合(這樣就可以保留這個順序)。我還發現它更容易更新。 csv數據輸入文件,方法是將包含名稱的列添加到FileWithTheData.csv中,這樣我就不必亂用dict,將值轉換爲集合,然後添加更多數據。我給這部分代碼現在看起來像這樣:
MyDict = {}
infile = open('FileWithTheData.csv', 'r')
for line in infile.readlines():
spl_line = line.split(',')
if int(spl_line[0]) in itemidlist: #note that this is the list I was formerly zipping together with a corresponding list of names to make my dict
MyDict.setdefault(int(spl_line[0]), list()).append(spl_line[1:])
print MyDict
請說明如何創建MyDict變量。 –