Python 从tkvar.get()截断字典

Python 从tkvar.get()截断字典,python,string,dictionary,tkinter,Python,String,Dictionary,Tkinter,我创建了一个带有两个下拉菜单的Tkinter窗口,允许用户选择开始月份和结束月份,以计算设定范围内的数据(见下文): 上面的代码生成此窗口,除了默认选项是7月18日而不是3月,我在测试代码后拍摄了窗口的屏幕截图: 我的两个弹出菜单的字典,dict\u months是: >>> dict_months {'Jan 17': Timestamp('2017-01-01 00:00:00'), 'Feb 17': Timestamp('2017-02-01 00:

我创建了一个带有两个下拉菜单的Tkinter窗口,允许用户选择开始月份和结束月份,以计算设定范围内的数据(见下文):

上面的代码生成此窗口,除了默认选项是7月18日而不是3月,我在测试代码后拍摄了窗口的屏幕截图:

我的两个弹出菜单的字典,
dict\u months
是:

>>> dict_months
    {'Jan 17': Timestamp('2017-01-01 00:00:00'), 
    'Feb 17': Timestamp('2017-02-01 00:00:00'), 
    'Mar 17': Timestamp('2017-03-01 00:00:00'), 
    'Apr 17': Timestamp('2017-04-01 00:00:00'), 
    'May 17': Timestamp('2017-05-01 00:00:00'), 
    'Jun 17': Timestamp('2017-06-01 00:00:00'), 
    'Jul 17': Timestamp('2017-07-01 00:00:00'), 
    'Aug 17': Timestamp('2017-08-01 00:00:00'), 
    'Sep 17': Timestamp('2017-09-01 00:00:00'), 
    'Oct 17': Timestamp('2017-10-01 00:00:00'), 
    'Nov 17': Timestamp('2017-11-01 00:00:00'), 
    'Dec 17': Timestamp('2017-12-01 00:00:00'), 
    'Jan 18': Timestamp('2018-01-01 00:00:00'), 
    'Feb 18': Timestamp('2018-02-01 00:00:00'), 
    'Mar 18': Timestamp('2018-03-01 00:00:00'), 
    'Apr 18': Timestamp('2018-04-01 00:00:00'), 
    'May 18': Timestamp('2018-05-01 00:00:00'), 
    'Jun 18': Timestamp('2018-06-01 00:00:00'), 
    'Jul 18': Timestamp('2018-07-01 00:00:00')}
我想修改我的
callback\u range()
函数,包括从用户输入中截断/切片字典。例如,如果用户如图中所示选择1月17日至3月17日,则所需输出应为:

>>> dict
{'Jan 17': Timestamp('2017-01-01 00:00:00'), 
'Feb 17': Timestamp('2017-02-01 00:00:00'), 
'Mar 17': Timestamp('2017-03-01 00:00:00')}
如何使用
tkvar\u start.get()
tkvar\u end.get()
截断字典,并包括字典之间的月份?字典是不可编辑的,我可能错了,但是使用
iterslice
似乎需要使用索引


islice(顺序、开始、停止、步骤)
这可能不是最好的方法,但您可以执行以下操作:

def callback_range():
    list_of_keys  = list(dict_months.keys())    
    # approach 1
    range_dict = { k:dict_months[k] for k in list_of_keys[list_of_keys.index(tkvar_start.get()):list_of_keys.index(tkvar_end.get())+1]} 
    print(range_dict)
    # approach 2
    import itertools
    range_dict = dict(itertools.islice(dict_months.items(),list_of_keys.index(tkvar_start.get()), list_of_keys.index(tkvar_end.get())+1)) 
    print(range_dict)
输出:

{'Jan 17': Timestamp('2017-01-01 00:00:00'), 'Feb 17': Timestamp('2017-02-01 00:00:00'), 'Mar 17': Timestamp('2017-03-01 00:00:00')}
{'Jan 17': Timestamp('2017-01-01 00:00:00'), 'Feb 17': Timestamp('2017-02-01 00:00:00'), 'Mar 17': Timestamp('2017-03-01 00:00:00')}
{'Jan 17': Timestamp('2017-01-01 00:00:00'), 'Feb 17': Timestamp('2017-02-01 00:00:00'), 'Mar 17': Timestamp('2017-03-01 00:00:00')}
{'Jan 17': Timestamp('2017-01-01 00:00:00'), 'Feb 17': Timestamp('2017-02-01 00:00:00'), 'Mar 17': Timestamp('2017-03-01 00:00:00')}