如何使用键在字典中查找值,然后搜索元组中的值(字典值)?

时间:2017-12-10 21:37:34

标签: python dictionary

这是我拥有的数据:您可以看到它是一个带有字符串键的字典,然后是多个元组。我正在尝试编写查找函数,以便使用密钥字符串和收费字符串来查找值(浮点数)。

dict1 = {'20MAY17': [('TOLL2', 9817.73), ('TOLL3', 8395.49)], '23MAY17': [('TOLL2', 6497.36), ('TOLL4', 6827.51)], '13MAY17': [('TOLL4', 9803.42)], '5MAY17': [('TOLL3', 6677.66)], '16MAY17': [('TOLL4', 1565.78), ('TOLL3', 7949.97), ('TOLL2', 3739.91)], '12MAY17': [('TOLL2', 5680.84)], '6MAY17': [('TOLL2', 2420.46)], '28MAY17': [('TOLL3', 6405.19), ('TOLL4', 1358.27)], '22MAY17': [('TOLL4', 4022.52), ('TOLL3', 8823.13)], '11MAY17': [('TOLL4', 4832.2699999999995)], '27MAY17': [('TOLL3', 8878.97)], '17MAY17': [('TOLL4', 4150.74)], '3MAY17': [('TOLL3', 5729.33)], '24MAY17': [('TOLL4', 1452.02), ('TOLL1', 3860.73)], '8MAY17': [('TOLL1', 9863.36)], '18MAY17': [('TOLL1', 4584.25)], '15MAY17': [('TOLL1', 8640.64)]}

字典名为dict1。

这是函数,我正在使用用户输入。

def lookup(dict1, str1, str2):
    print(dict1[str1][str2])

它应该做这样的事情:

lookup(dict1, '20MAY17', 'TOLL2')

9817.73

lookup(dict1, '20MAY17', 'TOLL3')

8395.49

3 个答案:

答案 0 :(得分:2)

您可以在词典中使用词典。我建议简单地预处理您的数据(如果您的原始数据存储在original_data

data = dict((key, dict(tpl)) for key, tpl in original_data.items())

然后你可以通过双项查找简单地进行查找:

data['20MAY17']['TOLL2']

答案 1 :(得分:1)

将数据结构转换为字典,其中包含值字典而不是元组列表。在那之后,查找是微不足道的。

>>> d = {'20MAY17': [('TOLL2', 9817.73), ('TOLL3', 8395.49)], '23MAY17': [('TOLL2', 6497.36), ('TOLL4', 6827.51)]}
>>> d_better = {k:dict(v) for k,v in d.items()}
>>> d_better
{'20MAY17': {'TOLL2': 9817.73, 'TOLL3': 8395.49}, '23MAY17': {'TOLL4': 6827.51, 'TOLL2': 6497.36}}
>>> 
>>> def lookup(dict_, day, toll):
...     return dict_[day][toll]
... 
>>> lookup(d_better, '20MAY17', 'TOLL2')
9817.73

正如您所看到的,lookup函数有点无根据,您可以直接编写d_better[day][toll]

答案 2 :(得分:1)

将功能更改为:

def lookup(dict1, str1, str2):
    print(dict(dict1.get(str1)).get(str2))

这是有效的,因为在第二个键传递之前,dict键被转换为dict。