我yaml.dump
用来输出字典。它根据键以字母顺序打印出每个项目。
>>> d = {"z":0,"y":0,"x":0}
>>> yaml.dump( d, default_flow_style=False )
'x: 0\ny: 0\nz: 0\n'
有没有办法控制键/值对的顺序?
在我的特定用例中,反向打印(碰巧)就足够了。为了完整起见,我正在寻找一个答案,该答案显示了如何更精确地控制订单。
我已经看过使用,collections.OrderedDict
但是PyYAML不支持(似乎)。我还研究了子类化yaml.Dumper
,但是我无法弄清它是否具有更改项目顺序的能力。
可能有更好的解决方法,但是我在文档或源代码中找不到任何内容。
Python 2(查看评论)
我将其分类OrderedDict
,并使其返回无法排序的项目的列表:
from collections import OrderedDict
class UnsortableList(list):
def sort(self, *args, **kwargs):
pass
class UnsortableOrderedDict(OrderedDict):
def items(self, *args, **kwargs):
return UnsortableList(OrderedDict.items(self, *args, **kwargs))
yaml.add_representer(UnsortableOrderedDict, yaml.representer.SafeRepresenter.represent_dict)
它似乎起作用:
>>> d = UnsortableOrderedDict([
... ('z', 0),
... ('y', 0),
... ('x', 0)
... ])
>>> yaml.dump(d, default_flow_style=False)
'z: 0\ny: 0\nx: 0\n'
Python 3或2(请参阅注释)
您还可以编写一个自定义表示符,但是我不知道以后是否会遇到问题,因为我从中剥离了一些样式检查代码:
import yaml
from collections import OrderedDict
def represent_ordereddict(dumper, data):
value = []
for item_key, item_value in data.items():
node_key = dumper.represent_data(item_key)
node_value = dumper.represent_data(item_value)
value.append((node_key, node_value))
return yaml.nodes.MappingNode(u'tag:yaml.org,2002:map', value)
yaml.add_representer(OrderedDict, represent_ordereddict)
但是,您可以使用本机OrderedDict
类。
考虑这个例子,从0到10颠倒数字的顺序:<代码> 这以一种双重的方式颠倒了顺序。如果我输入100个从0到10的数字,它包含a 对于字典顺序,我需要同样的东西。我有一根固定长度为10的绳子。如何颠倒字典顺序? 如果它只包含,这将非常简单。但是它也可以包含数字和,并且区分大小写。 有人知道怎么做吗?
问题内容: 我经常使用python处理数据目录。最近,我注意到列表的默认顺序已更改为几乎毫无意义的内容。例如,如果我位于包含以下子目录的当前目录中:run01,run02,…,run19,run20,然后从以下命令生成列表: 然后我通常会按以下顺序获得列表: 等等。顺序曾经是字母数字。但是这个新订单已经存在了一段时间。 是什么决定这些列表的(显示)顺序? 问题答案: 我认为顺序与文件在FileSy
在 FreeMarker 2.3.23 中,指令名可以使用驼峰样式来代替蛇形样式, 比如 startsWith 代替 starts_with。 但是要知道,在相同模版内,FreeMarker 会强制对模板语言部分的所有标识符使用驼峰样式 (用户自定义名称不会受影响)。 abs ancestors api boolean byte c for strings, for booleans cap_fi
$ ${...}, 插值 # #, 总体结构, 指令 #{...}, #{...}: 数字插值 < <#...>, 指令 <#--...-->, 总体结构 A ABC, lower_abc, upper_abc abs built-in, abs absolute value, abs acquisition, 使用获得机制 adding hashes, 连接 adding s
问题内容: 我在mysql排序中寻找一些调整,我通常从表中选择记录,然后按Name(varchar)ASC排序记录, 但编号始终是第一位的 这是我的问题的一些示例( 注意。mysql首先用0-9排序记录 ) 我想要的是字母顺序,然后是数字 所需的输出 问题答案: 使用以下子句:
问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法