我发现自己避免使用字典,因为它们的代码通常有将近一半是重复的。我通常在嵌套字典中执行此操作,其中所有子字典都包含相同的键,但值不同。在
我手动创建一个大型父字典,其中每个键都包含一个嵌套字典,用于外部模块。嵌套字典都使用相同的键来定义配置参数。这种用法是显式的,可以使用,但是为我手动创建的每个嵌套字典重新键入或复制/粘贴键会感觉很愚蠢。我不太关心优化内存或性能,只是想知道我是否应该用另一种更像Python的方式来做这件事。在
作为一个常见的小例子和模式:
people_dict = {
"Charles Lindberg": {"address": "123 St.",
"famous": True},
"Me": {"address": "456 St.",
"famous": False}
}
>>>people_dict["Charles Lindberg"]["address"]
"123 St."
虽然dictionary支持显式代码,但是定义具有重复键的嵌套字典是乏味且容易出错的。在本例中,有一半的嵌套字典是所有嵌套字典共有的代码重复代码。 我尝试过使用元组来消除重复键,但是发现这会导致代码脆弱——任何位置的改变(而不是字典键)都会失败。这也会导致代码不明确且难以遵循。在
^{pr2}$相反,我编写了一个类来封装相同的信息:这个 成功减少重复代码。。。在
class Person(object):
def __init__(self, address, famous=False):
self.address = address
self.famous = famous
people_dict = [
"Charles Lindberg": Person("123 St.", famous=False),
"Me": Person("456 St."),
]
>>>people_dict["Charles Lindberg"].address
"123 St."
创建一个类似乎有点过分了。。。标准数据类型似乎太基本了。。。在
如果您想要一个dict,其中所有值都是具有相同或相似键的dict,那么可以定义一个函数,该函数接受这些值并返回其中一个内部dict。在
听起来你有一个数据矩阵,因为每个“行”都有相同的键(列),所以我使用NumPy数组:
或者使用更高级的熊猫:
^{pr2}$它可以很容易地将dicts的原始dict直接加载到矩阵中,并提供类似的查找特性。在
首先,您可以阅读上面的链接以获取有关名称元组的更多信息:https://docs.python.org/2/library/collections.html#collections.namedtuple
NamedTuples可以帮助您避免“重复代码”。您可以为address创建一个namedtuple并使用它来定义。
我,尤其喜欢物体。OO对于这个问题有更好的解决方案。您可以创建一个方法do export object to a dict
对于函数范式,最好使用列表、数组和dict,因为有很多方法/函数可以帮助处理这种结构(map、reduce等)。如果你没有假装在你的应用中使用一些功能,那就去OO(面向对象的)soluction。在
问候 安德烈
相关问题 更多 >
编程相关推荐