Tag: namedtuple

通过字段名称sortingnamedtuples列表的Pythonic方法

我想sorting命名元组列表,而不必记住字段名的索引。 我的解决scheme看起来很尴尬,希望有人会有一个更优雅的解决scheme。 from operator import itemgetter from collections import namedtuple Person = namedtuple('Person', 'name age score') seq = [ Person(name='nick', age=23, score=100), Person(name='bob', age=25, score=200), ] # sort list by name print(sorted(seq, key=itemgetter(Person._fields.index('name')))) # sort list by age print(sorted(seq, key=itemgetter(Person._fields.index('age')))) 谢谢,尼克

序列化Python命名为json

什么是序列化一个namedtuple JSON与保留的字段名称的build议方式是什么? 将一个namedtuple序列化为json只会导致序列化的值和字段名称在翻译中丢失。 我希望这些字段在json化后也可以保留,因此做了以下工作: class foobar(namedtuple('f', 'foo, bar')): __slots__ = () def __iter__(self): yield self._asdict() 上面的序列化为json,因为我期望和行为像我在其他地方使用(属性访问等),除了非迭代像结果而迭代它(这对我的用例罚款)的名称为tuple。 什么是保留字段名称转换为json的“正确方法”?

将文档添加到namedtuples?

是否有可能以简单的方式添加一个文档string到一个namedtuple? 我试过了 from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) """ A point in 2D space """ # Yet another test """ A(nother) point in 2D space """ Point2 = namedtuple("Point2", ["x", "y"]) print Point.__doc__ # -> "Point(x, y)" print Point2.__doc__ # -> "Point2(x, y)" 但是这并没有削减。 有可能以其他方式做?

命名为可选的关键字参数

我试图将一个长而空的“数据”类转换成命名的元组。 我的课目前看起来像这样: class Node(object): def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right 转换为namedtuple后,它看起来像: from collections import namedtuple Node = namedtuple('Node', 'val left right') 但是这里有一个问题。 我原来的类允许我只传入一个值,并通过使用默认值的命名/关键字参数来照顾默认值。 就像是: class BinaryTree(object): def __init__(self, val): self.root = Node(val) 但是这不适用于我的重构命名的元组,因为它期望我通过所有的字段。 我当然可以将Node(val)replace为Node(val, None, None)但不是我喜欢的。 那么是否存在一个很好的技巧,可以使我的重写成功,而不会增加很多代码复杂性(元编程),或者我应该吞下药片并继续进行“search和replace”? 🙂