我这里有一个父词典,它是两个词典X
和Y
的集合。使用csv模块的DictReader
存储它们。
让我们调用包含两个有序词典的字典example_dicto
。为了澄清,来自Spyder的变量资源管理器,这看起来像:
Name Type Size Value
example_dict dict 2 {'X':OrderedDict, 'Y': OrderedDict}
好的,我知道X
和Y
是这里的主要关键。但我想通过这两本词典来查找价值观。假设Duration
的{{1}}列和X
的{{1}},我希望我的函数根据行读取这些列并返回它们的值。
Duration (min)
当我调用Y
时,python返回通常的KeyError,其中回溯告诉我这些'键都没有。存在。
所以基本上我必须索引一个字典集合,这个字典是一个字典集合,然后在它们的主要字典中索引键。键X和Y返回一个值。我如何对它们编制索引,因为通常的def info_from_row(row, dictionary):
if dict == 'X':
duration = float(row['Duration'])
else:
duration = float(row['Duration (min)'])
return duration
方法会给我一个错误,除了info_from_row
返回dict['key']
之外。
有关更多说明,这些词典如下所示:
'Duration' in X
答案 0 :(得分:2)
我相信你对于你想做什么以及如何实现它感到很困惑。假设我正确地理解了你的问题,我就是这样做的:
from collections import OrderedDict
def info_from_row(my_dict):
try:
return float(my_dict['Duration'])
except KeyError:
return float(my_dict['Duration (min)'])
example_dict = {'X': OrderedDict([('ID', '123456'), ('Duration', '54941')]),
'Y': OrderedDict([('ID', '789101'), ('Duration (min)', '7869')])}
print(info_from_row(example_dict['X'])) # -> 54941.0
print(info_from_row(example_dict['Y'])) # -> 7869.0
如您所见,无论您要查询哪个子词典,都会打印持续时间。
执行完全相同的不使用try
- except
的方法是:
def info_from_row(my_dict):
if 'Duration' in my_dict:
return float(my_dict['Duration'])
else:
return float(my_dict['Duration (min)'])
具有完全相同的结果,并以完全相同的方式调用; info_from_row(example_dict['Y'])
。
如果您希望主key
('X'
或'Y'
)也是函数参数,您可以稍微修改函数(其中任何一个),如下所示:< / p>
def info_from_row(my_dict, main_key):
if 'Duration' in my_dict[main_key]:
return float(my_dict[main_key]['Duration'])
else:
return float(my_dict[main_key]['Duration (min)'])
但是也必须修改调用语句:
print(info_from_row(example_dict, 'X')) # -> 54941.0
print(info_from_row(example_dict, 'Y')) # -> 7869.0