将字典值导入Python中的OptionMenu

时间:2016-03-05 01:41:41

标签: python csv dictionary

我现在卡住了,可以真正使用一些帮助,我已经筋疲力尽了谷歌可以找到的所有资源,我仍然无法弄清楚如何做我正在尝试的事情。 (如果可能的话)

在我的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 个答案:

答案 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']

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']