说我有以下字典时间密钥字典:
dict = {
"1363017884": "some val",
"1363033813": "another val",
}
我想找到大于1363033000的所有密钥(在这种情况下只有1363033813匹配)。我有一个for循环来检查每个键,但这似乎效率很低:
for epoch,value in dict.iteritems():
if int(epoch) >= 1363033000:
do something interesting
答案 0 :(得分:7)
循环词典是你唯一真正的选择,没有更有效的方法。
或者您可以使用不同的数据结构;例如,存储连接到btree结构中的值的整数会使搜索大于或低于给定搜索值的键更有效。
答案 1 :(得分:0)
您可以稍微修改code from here以添加large_keys
属性。现在,无论何时添加其中一个大纪元,dict都会跟踪它们。当你想迭代它们时,你可以简单地遍历那个属性。
class MyUpdateDict(dict):
def __init__(self, *args, **kwargs):
self.large_keys = []
self.update(*args, **kwargs)
def __setitem__(self, key, value):
# optional processing here
if int(key)>1363033000:
self.large_keys.append((key,value))
super(MyUpdateDict, self).__setitem__(key, value)
def update(self, *args, **kwargs):
if args:
if len(args) > 1:
raise TypeError("update expected at most 1 arguments, got %d" % len(args))
other = dict(args[0])
for key in other:
self[key] = other[key]
for key in kwargs:
self[key] = kwargs[key]
def setdefault(self, key, value=None):
if key not in self:
self[key] = value
return self[key]
这可能过于简单了,因为大值是硬编码的,但您可以修改以使其更合适。
答案 2 :(得分:0)
如果您在字典中有数字和字符串作为键,请先执行该操作
myStringsList = [s for s in dictFromFile.keys() if s.isdigit()]
这将为您提供一个数字为字符串的列表。
然后将字符串列表转换为int列表,仅获取>比X 元素:
myFinalList = [s for s in map(int, mynewlist) if s > X]
希望它有所帮助!