我现在卡住了,可以真正使用一些帮助,我已经筋疲力尽了谷歌可以找到的所有资源,我仍然无法弄清楚如何做我正在尝试的事情。 (如果可能的话)
在我的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.)我导入了字典,以便在需要时可以反复引用这些值。
我真的很喜欢编程,所以如果我看起来像个完全白痴,我很抱歉!
答案 0 :(得分:2)
为什么不使用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']
for
和if
块可以更好地编写为:
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']