我在excel电子表格中有一个很大的公司信息列表。我需要将公司信息带入我的程序中进行处理。
每家公司都有一个独特的标签,用于访问公司。我可以使用标签作为键创建字典,使用公司信息作为值,例如{label1: company1, label2: company2, ...}
。通过这种方式,当创建字典时,它会占用太多内存。
是否可以创建一个可以像字典一样使用的生成器?
答案 0 :(得分:1)
假设您遇到的问题是从csv文件访问键值结构化数据,您有3个选项:
答案 1 :(得分:1)
这个问题的主要目标似乎是让一个行为的对象像字典一样,没有字典的内容在RAM中(OP:"通过这样做)这样,当创建字典时,它会占用太多内存。")。这里的一个选择是使用sqlitedict,它模仿Python字典API,并在底层使用Sqlite数据库。
以下是当前文档中的示例:
>>> # using SqliteDict as context manager works too (RECOMMENDED)
>>> with SqliteDict('./my_db.sqlite') as mydict: # note no autocommit=True
... mydict['some_key'] = u"first value"
... mydict['another_key'] = range(10)
... mydict.commit()
... mydict['some_key'] = u"new value"
... # no explicit commit here
>>> with SqliteDict('./my_db.sqlite') as mydict: # re-open the same DB
... print mydict['some_key'] # outputs 'first value', not 'new value'
答案 2 :(得分:0)
您可以创建一个覆盖__getitem__
方法的类。像:
class Foo:
def __getitem__(self,key):
# ...
# process the key
# for example
return repr(key)
现在,如果您创建Foo
:
>>> somefoo = Foo()
>>> somefoo['bar']
"'bar'"
>>> somefoo[3]
'3'
所以语法上它有点“像字典一样”。
您还可以使用send
生成器,如演示in this answer:
def bar():
while True:
key = yield
# process the key
# for example
yield repr(key)
并将其命名为:
>>> somebar = bar()
>>> next(somebar)
>>> somebar.send('bar')
"'bar'"
>>> next(somebar)
>>> somebar.send(3)
'3'