将多列表转换为dicts的dict

时间:2013-11-18 20:34:20

标签: python class dictionary

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

#!/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()