在这里,我们将给大家分享关于PyYAML可以非字母顺序转储字典项吗?的知识,同时也会涉及到如何更有效地c#–可以将ResharperIntellisense配置为按字母顺序排序吗?、javascrip
在这里,我们将给大家分享关于PyYAML可以非字母顺序转储字典项吗?的知识,同时也会涉及到如何更有效地c# – 可以将Resharper Intellisense配置为按字母顺序排序吗?、javascript – 在Polymer中按字母顺序排序转发器、python - 将带有正确缩进的嵌套字典转储到 yaml、python – 转储解析文档时是否可以保留YAML块结构?的内容。
本文目录一览:- PyYAML可以非字母顺序转储字典项吗?
- c# – 可以将Resharper Intellisense配置为按字母顺序排序吗?
- javascript – 在Polymer中按字母顺序排序转发器
- python - 将带有正确缩进的嵌套字典转储到 yaml
- python – 转储解析文档时是否可以保留YAML块结构?
PyYAML可以非字母顺序转储字典项吗?
我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
,但是我无法弄清它是否具有更改项目顺序的能力。
c# – 可以将Resharper Intellisense配置为按字母顺序排序吗?
举例来说,我有一个名为“client”的对象,它有一个名为Ethnicityrequired的属性,另一个属性叫为Ethnicities.
仅使用本机VS2013 intellisense,这就是我输入的client.eth
这就是我的期望;两个属性都列在一起.
但是,Resharper的Intellisense(更少)给了我这个
虽然可见成员按字母顺序排序,但缺少的种族属性位于列表底部,只有在我键入“ethnicti”以便文本不再与Ethnicityrequired匹配时才会匹配.
通过仔细检查列表,似乎Resharper正在应用某种分组,然后在每个组中按字母顺序排序.
有谁知道如何摆脱这种相当无用的行为,并恢复到像Resharper 6.0和早期版本的直接alpha排序?
如果你能为JetBrains的理由提供辩护,可以获得奖励积分.
解决方法
Resharper =>选项=> IntelliSense =>完成行为=>按字母顺序设置排序项目
javascript – 在Polymer中按字母顺序排序转发器
<li ng-repeat="link.title for link in links | orderBy:'title'">
我正在试验聚合物,我想知道你可以使用聚合物过滤器做类似的事情(我想在标记中声明性地对数据进行排序而不是直接在数据集上).所以我一直在努力尝试这一点(为了清晰起见,我已经删除了一些代码):
<polymer-element name="image-links" attributes="axis data width"> <template> <core-ajax id="ajax" auto url="../data/{{data}}.json" on-core-response="{{linksLoaded}}" handleAs="json"> </core-ajax> <ul> <template repeat="{{link in links | sort}}"> <li>...</li> </template> </ul> </template> <script> polymer('image-links',{ links: [],linksLoaded: function () { this.links = this.$.ajax.response.data; },sort : function (a,b) { var titleA = a.title.toLowerCase(),titleB = b.title.toLowerCase(); if (titleA < titleB) return -1; if (titleA > titleB) return 1; return 0; } }); </script>
我得到一个空数组传递给元素原型中的sort函数(链接数组中肯定有对象).
这里也是我正在使用的ajax调用的响应:
{ "data" : [ { "name" : "github","url" : "..." },{ "name" : "linked",{ "name" : "stack",{ "name" : "gplus",{ "name" : "twitter","url" : "..." } ] }
这是接近这个的正确方法还是超过我的睡觉时间?!
提前致谢
解决方法
sort: function(items) { items.sort(function (a,b) { var titleA = a.title.toLowerCase(),titleB = b.title.toLowerCase(); if (titleA < titleB) return -1; if (titleA > titleB) return 1; return 0; }); return items; }
使用空数组可能会调用一次,因为链接以这种方式启动并异步填充.
为了更接近Angular构造,你可以有这样的东西:
<template repeat="{{link in links | orderBy('title')}}"> ... orderBy: function(items,key) { var sorter = function (a,b) { var titleA = a[key].toLowerCase(),titleB = b[key].toLowerCase(); if (titleA < titleB) return -1; if (titleA > titleB) return 1; return 0; }; items.sort(sorter); }
有很多方法可以将分类器提取为可重用的形式,但最简单的解决方案是导入polymer-filters,它将提供与Angular相同或类似的orderBy(和许多其他过滤器).使用polymer-filters,语法与我在第二个示例中显示的相同,但您可以完全省略orderBy实现.
python - 将带有正确缩进的嵌套字典转储到 yaml
如何解决python - 将带有正确缩进的嵌套字典转储到 yaml?
我非常接近于自动转储从数据框创建的 yml 文件以用于自动化任务。
我有一个结构如下的函数:
def get_all_values(nested_dictionary):
for key,value in nested_dictionary.items():
model = {
"models": [
{
"name": key,"columns": None
}
]
}
yield(model)
for key,value in value.items():
table = [
{
"name": key,"tests": [
"not_null","unique"
]
}
]
yield(table)
nested_dictionary = d1
get_all_values(nested_dictionary)
data = get_all_values(nested_dictionary)
with open(''data.yml'',''w'') as outfile:
with redirect_stdout(outfile):
for i in data:
ruamel.yaml.round_trip_dump(i,outfile,indent=5,block_seq_indent=2)
它引用的字典作为生成器产生。 dicts 结构是:
{''models'': [{''name'': ''budgets_sales'',''columns'': None}]}
[{''name'': ''budget_amt'',''tests'': [''not_null'',''unique'']}]
[{''name'': ''budget_group'',''unique'']}]
[{''name'': ''budget_name'',''unique'']}]
[{''name'': ''budget_pk'',''unique'']}]
这“很好”...但输出如下:
models:
- name: budgets_sales
columns:
- name: budget_amt
tests:
- not_null
- unique
- name: budget_group
tests:
- not_null
- unique
- name: budget_name
tests:
- not_null
- unique
我要求字典中键的所有值都有一个额外的缩进。我不知道如何使值对键缩进。
如果正确,它看起来像这样:
- name: budgets_sales
columns:
- name: budget_amt
tests:
- not_null
- unique
- name: budget_group
tests:
- not_null
- unique
- name: budget_name
tests:
- not_null
- unique
- name: budget_pk
tests:
- not_null
- unique
- name: entry_type_code
tests:
- not_null
- unique
- name: institution_fk
tests:
- not_null
- unique
谁能提供一个方法?
感谢 Anthon,这就是我最终使用的:
def get_all_values(nested_dictionary):
res = [{"version":2},{"models":None}]
for key,value in nested_dictionary.items():
seq = []
res.append([{"name": key,"columns": seq}])
# for key1,value1 in value.items(): # not using value1
for key1 in value.keys():
elem = {"name": key1,"tests": ["not_null","unique"]}
seq.append(elem)
return res
nested_dictionary = d1
get_all_values(nested_dictionary)
data = get_all_values(nested_dictionary)
with open(''data.yml'',''w'') as outfile:
with redirect_stdout(outfile):
for i in data:
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=5,sequence=5,offset=4)
yml.dump(i,outfile)
解决方法
在您需要的输出中,与键 columns
关联的值是一个序列。
如果你的 Python 数据结构是一个列表,你只会得到它,所以请确保你
将您的个人 table
条目附加到某个变量。
我猜测 d1
基于您的“不正确”输出:
import sys
import ruamel.yaml
d1 = dict(budgets_sales=dict(budget_amt=None,budget_group=None,budget_name=None,budget_pk=None))
def get_all_values(nested_dictionary):
res = []
for key,value in nested_dictionary.items():
seq = []
res.append({"name": key,"columns": seq})
# for key1,value1 in value.items(): # not using value1
for key1 in value.keys():
elem = {"name": key,"tests": ["not_null","unique"]}
seq.append(elem)
return res
data = get_all_values(d1)
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=5,sequence=5,offset=3)
yaml.dump(data,sys.stdout)
给出:
- name: budgets_sales
columns:
- name: budgets_sales
tests:
- not_null
- unique
- name: budgets_sales
tests:
- not_null
- unique
- name: budgets_sales
tests:
- not_null
- unique
- name: budgets_sales
tests:
- not_null
- unique
您应该考虑一些事项(除了在 SO 上更好地格式化您的代码和数据):
-
round_trip_dump
函数已被弃用,请勿在新代码中使用 - 至少从 2007 年 9 月起,推荐的包含 YAML 文档的文件扩展名为
.yaml
- 不要在多个阶段编写 YAML 文件,创建一个完整的数据结构并转储它。如果您希望在一个文件中包含多个 YAML 文档,请列出数据结构并使用
.dump_all()
方法。
如果所有其他方法都失败了,并且您有想要生成为输出的有效手工 YAML,请加载该 YAML(使用 YAML(typ=''safe'').load()
并检查您获得的 Python 中的数据结构。
python – 转储解析文档时是否可以保留YAML块结构?
给input.yml …
pubkey: | -----BEGIN PUBLIC KEY----- MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2 UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK EsUgJHXcpw7OPxRrCQIDAQAB -----END PUBLIC KEY-----
…使用python3执行此程序…
import yaml with open('input.yml',mode='r') as f: parsed = yaml.safe_load(f) with open('output.yml',mode='w') as f: yaml.dump(parsed,f)
…产生这个output.yml …
pubkey: '-----BEGIN PUBLIC KEY----- MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2 UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK EsUgJHXcpw7OPxRrCQIDAQAB -----END PUBLIC KEY----- '
是否可以使用PyYAML保留块的结构?
解决方法
并提供一个专门的类似字符串的类,用于保存有关其原始格式的信息.
这是添加到ruamel.yaml(免责声明:我是该软件包的作者)的一部分,因为它是从PyYAML派生的,并且仍然保持类似的设置.使用ruamel.yaml:
import ruamel.yaml as yaml yaml_str = """\ pubkey: | -----BEGIN PUBLIC KEY----- MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2 UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK EsUgJHXcpw7OPxRrCQIDAQAB -----END PUBLIC KEY----- """ data = yaml.load(yaml_str,Loader=yaml.roundtripLoader) print(yaml.dump(data,Dumper=yaml.roundtripDumper,indent=4))
给你:
pubkey: | -----BEGIN PUBLIC KEY----- MIGfMA0GCSq7OPxRrQEBAQUAA4GNADCBiQKBgQCvRVUKp6pr4qBEnE9lviuyfiNq QtG/OCyBDXL4Bh3FmUzfNI+Z4Bh3FmUx+z2n0FCv/4BpgHTDl8D95NPopWVo1RH2 UfhyMd6dQ/x9T5m+y38JMzmSVAk+Fqu8ya18+yQVOEyEIx3Gxpsgegow33gcxfjK EsUgJHXcpw7OPxRrCQIDAQAB -----END PUBLIC KEY-----
至少使用Python 2.7和3.5.
indent = 4是必要的,因为roundtripDumper默认为两个空格缩进和原始缩进
不保留文件(不这样做可以简化重新缩进YAML文件).
如果您无法切换到ruamel.yaml,您应该能够使用其源代码提取所需的所有更改,但如果可以,您还可以使用其他功能,如注释和合并密钥名称保留.
我们今天的关于PyYAML可以非字母顺序转储字典项吗?的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – 可以将Resharper Intellisense配置为按字母顺序排序吗?、javascript – 在Polymer中按字母顺序排序转发器、python - 将带有正确缩进的嵌套字典转储到 yaml、python – 转储解析文档时是否可以保留YAML块结构?的相关信息,请在本站查询。
本文标签: