您绝对是正确的,尝试在作用域中创建“动态变量”几乎总是一个坏主意。字典通常是随着时间的推移建立对象集合并引用它们的答案......
我不完全理解你的应用程序和格式,但一般来说,定义和使用你的字典它看起来像这样:
trucks = {}
trucks['0300'] = ['a']
trucks['0300'].append('c')
trucks['0300'].extend(['c','d'])
aTruck = trucks['0300']
现在,由于其中每一个都应该是字符串列表,因此您可能只想使用 defaultdict,并告诉它使用列表作为不存在键的默认值:
from collections import defaultdict
trucks = defaultdict(list)
trucks['0300']
# []
请注意,即使这是一个不包含任何条目的全新字典,“truck_0300”键仍然返回一个新列表。这意味着您不必检查密钥。只需附加:
trucks = defaultdict(list)
trucks['0300'].append('a')
A defaultdict
可能是您想要的,因为您根本不必预先定义键。当你准备好时它就在那里。
获取最大值的键
根据您的评论,这里是如何获取具有字典最大值的键的示例。这非常简单,因为您只需使用max
并定义如何确定用于比较的密钥:
d = {'a':10, 'b':5, 'c':50}
print max(d.iteritems(), key=lambda (k,v): v)
# ('c', 50)
d['c'] = 1
print max(d.iteritems(), key=lambda (k,v): v)
# ('a', 10)
您所要做的就是定义如何生成比较键。在这种情况下,我只是告诉它以值作为键。对于像这样的非常简单的关键函数,您只需告诉它从对象中提取索引或属性,您可以通过使用来提高它的效率operator
模块,以便关键函数在 C 中而不是在 python 中作为 lambda:
from operator import itemgetter
...
print max(d.iteritems(), key=itemgetter(1))
#('c', 50)
itemgetter
创建一个新的可调用对象,它将从循环传入的元组中提取第二项。
现在假设每个值实际上是一个列表(类似于您的结构)。我们将其设为一个数字列表,您想要找到具有最大总数的列表的键:
d = {'a': range(1,5), 'b': range(2,4), 'c': range(5,7)}
print max(d.iteritems(), key=lambda (k,v): sum(v))
# ('c', [5, 6])