2016-03-05 46 views
1

我現在被卡住了,真的可以使用一些幫助,我已經耗盡了Google可以爲我找到的所有資源,而且我仍然無法弄清楚如何執行我正在嘗試的操作。 (如果它甚至可能)在Python中將字典值導入到OptionMenu中

在我的python程序中,我使用Python 3.5.1中的Tkinter來製作一個小小的計算器applet。對於有問題的計算器,我創建了一個CSV文件並使用csv.DictReader導入它。

import csv 
exptable = csv.DictReader(open('C:/Users/SampleInfo.csv')) 

result = {} 
for column in exptable: 
    key = column.pop('Current Level') 
    if key in result: 
     pass 
    result[key] = column 

現在我根本弄不清楚的部分是如何使用這個導入的字典中包含的信息。下面是我想那麼遠,

DropDownLevelVar = StringVar() 
DropDownLevel = ttk.OptionMenu(root, {column}) 
DropDownLevel.grid(column=3, row=1) 

這是留給我......

Error on line 49, in module DropDownLevel = ttk.OptionMenu(root, {column}) 

TypeError: unhashable type: 'dict' 

的CSV詞典我想使用包含數據的2列,「現時水平和總EXP「請參閱This for what the Data looks like.

我想要的是OptionMenu下拉列表中填充字典中當前級別下列出的值。

我的目標是創建一個超級簡單的計算器,該計算器可以計算出我需要殺死多少個怪物以達到我想要的級別。 (如果當前等級= 55,那麼100殺死在500xp ea直到56)。我導入了字典,以便我可以反覆參考值,如果我需要。

我真的很新編程,所以我很抱歉,如果我看起來像一個完整的白癡!

回答

1

爲什麼不使用this method來填充字典?

總之,要正確填充result字典:

import csv 
exptable = csv.DictReader(open('C:/Users/SampleInfo.csv')) 

result = {} 
for column in exptable: # should actually be called `row` 
    key = column['Current Level'] 
    if key not in result: 
     result[key] = column['Total EXP'] 

forif塊可以更好的寫法如下:

for column in exptable: # should actually be called `row` 
    if column['Current Level'] not in result: 
     result[column['Current Level']] = column['Total EXP'] 

如果ttk.OptionMenu想要一個字典,那麼該行DropDownLevel = ttk.OptionMenu(root, {column})或許應該成爲:

DropDownLevel = ttk.OptionMenu(root, result) 

編輯:而pythonic方式做到這一點,按照上面鏈接的方法:

import csv 

result = {} 
with open('C:/Users/SampleInfo.csv') as csvfile: 
    reader = csv.DictReader(csvfile) 
    for row in reader: 
     if row['Current Level'] not in result: # is this check necessary? 
      result[row['Current Level']] = row['Total EXP'] 
+0

Dang完美!十分感謝你的幫助!!我以這種方式進行導入只是因爲我是新手,你的方法看起來更乾淨! –

+0

@MaxwellDeFilippis如果您發現有用的答案,請考慮投票並接受適當的答案。請參閱「[當某人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers)」 – aneroid