【问题标题】:Convert a multi-column table to a dict of dicts将多列表转换为字典的字典
【发布时间】:2013-11-18 20:34:20
【问题描述】:

我有自定义类来模拟表中的一行(在数据库概念中),每一列都是一个字符串。

class Row:
  def __init__(self, filename, message, version):
    self.filename = filename
    self.message = message
    self.version = version

我使用一个列表来存储它们。

假设我不知道每一列的范围,我想把这个“表”转移到一个字典中, 这样就更容易查询filename = OOOversion = XXXX 的所有行。 有什么更好的方法来做到这一点?现在我可以遍历所有行并为特定列构建范围,但它是一种意大利面条代码。

【问题讨论】:

  • 您需要将class 设为小写。此外,将row 大写将遵循惯例。

标签: python class dictionary


【解决方案1】:

最简单的可能是这样的。如果您知道您的行是不可变的,您可以提供一个 hash 方法 - 这可能看起来更好一些。

#!/usr/local/cpython-3.3/bin/python

class Row:
    def __init__(self, filename, message, version):
        self.filename = filename
        self.message = message
        self.version = version

    def __str__(self):
        return '{} {} {}'.format(self.filename, self.message, self.version)

    __repr__ = __str__

def main():
    list_ = [
        Row('abc', 'message1', 'version1'),
        Row('def', 'message2', 'version2'),
        Row('ghi', 'message3', 'version3'),
        Row('jkl', 'message4', 'version4'),
        Row('mno', 'message5', 'version5'),
        ]

    dict_ = {}
    for row in list_:
        tuple_ = (row.filename, row.version)
        dict_[tuple_] = row

    sought = ('def', 'version2')
    print(dict_[sought])

main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多