我在python中有一个名为tuple的类
class Town(collections.namedtuple('Town', [
'name',
'population',
'coordinates',
'population',
'capital',
'state_bird'])):
# ...
Run Code Online (Sandbox Code Playgroud)
我想做的是将其变成字典.我承认python不是我强大的语言之一.关键是我不希望它与我所拥有的字段的名称或数字紧密相关.
有没有办法写它,以便我可以添加更多的字段,或传递一个完全不同的命名元组并获取字典.
编辑:我不能改变原来的类定义,因为它在别人的代码中.所以我需要一个城镇的实例并将其转换为字典.
我问这个是因为我觉得这很令人惊讶——我认为 anamedtuple会有更多的开销。
(背景是我在内存中缓存了一个大的 Django 查询,发现 Django 对象的大小是 的 100 倍.values()。然后我想知道namedtuple这些对象的开销版本是什么,允许我仍然使用.对项目的访问作为属性。较小的是不是我所期望的。)
#!/usr/bin/env python
from pympler.asizeof import asizeof
from collections import namedtuple
import random
import string
QTY = 100000
class Foz(object):
pass
dicts = [{'foo': random.randint(0, 10000),
'bar': ''.join([random.choice(string.ascii_letters + string.digits) for n in xrange(32)]),
'baz': random.randrange(10000),
'faz': random.choice([True, False]),
'foz': Foz()} for _ in range(QTY)]
print "%d dicts: %d" % (len(dicts), asizeof(dicts))
# /sf/ask/3074486831/
MyTuple = namedtuple('MyTuple', sorted(dicts[0]))
tuples = [MyTuple(**d) for d …Run Code Online (Sandbox Code Playgroud)