Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python OrderedICT还是OrderedICT?_Python_Pyyaml - Fatal编程技术网

python OrderedICT还是OrderedICT?

python OrderedICT还是OrderedICT?,python,pyyaml,Python,Pyyaml,我现在很困惑。我正在使用PyYAML编辑一些YAML文件 data = yaml.load_all(open('testingyaml.yaml'),Loader=yaml.RoundTripLoader) My testingyaml.yaml文件包含以下内容: spring: profiles: dev datasource: url: jdbc:postgresql://127.0.0.1:5432/nfvgrid dns: enable: false cassand

我现在很困惑。我正在使用PyYAML编辑一些YAML文件

data = yaml.load_all(open('testingyaml.yaml'),Loader=yaml.RoundTripLoader)
My testingyaml.yaml文件包含以下内容:

spring:
  profiles: dev
  datasource:
    url: jdbc:postgresql://127.0.0.1:5432/nfvgrid
dns:
  enable: false
cassandra:
  host: 192.168.7.151
当我打印数据时,它会打印以下内容:

ordereddict['spring',ordereddict['profiles','dev','datasource',ordereddict['url','jdbc:postgresql://127.0.0.1:5432/nfvgrid']],'dns',ordereddict['enable',False],'cassandra',ordereddict['host','192.168.7.151']]

我还想对这个有序字典执行一些操作,但python抛出了一个错误NameError:name'orderedict'未定义

它通常是OrderedICT,但不知何故Pyaml返回OrderedICT。
我应该如何解决这个问题?

您几乎肯定没有使用前面提到的pyyaml,因为它没有RoundTripLoader。相反,您可能正在使用

此替代方案在python 2安装上使用它自己的,在python 3上使用本机collections.OrderedDict。此选项支持OrderedDict执行的大多数操作,因此您没有理由无法对其进行操作。见其文件

但是,如果您希望从一个转换为另一个,可以执行以下操作:

x = collections.OrderedDict(some_ruamel_ordered_dict.items())

几乎可以肯定的是,您没有像前面所说的那样使用pyyaml,因为它没有RoundTripLoader。相反,您可能正在使用

此替代方案在python 2安装上使用它自己的,在python 3上使用本机collections.OrderedDict。此选项支持OrderedDict执行的大多数操作,因此您没有理由无法对其进行操作。见其文件

但是,如果您希望从一个转换为另一个,可以执行以下操作:

x = collections.OrderedDict(some_ruamel_ordered_dict.items())

发生了一些奇怪的事情,或者您没有使用代码示例加载该文件,然后从数据中获取打印。如果您确实在使用yaml.load_,那么所有这些都将返回一个生成器对象,该对象允许您跨过该文件中的1个或多个yaml文档。因为您没有使用,所以使用load_all没有什么意义:

给出: 发展 上述示例中的实际数据类型是ruamel.yaml.comments.CommentedMap,如果执行以下更简单的操作,也会得到该类型的数据:

data = yaml.load(open('testingyaml.yaml'), Loader=yaml.RoundTripLoader)
print(type(data))
它打印的不是load的用法,而是loadall的用法

CommentedMap来自ordereddict

因为对于往返,您使用的是RoundTripLoader ruamel.yaml需要保留订单,并有一个地方附上任何评论和其他要保留的信息,这在使用dict.ordereddict时是不可能的。如果ruamel.ordereddict可用或ordereddict,ordereddict只是ruamel.ordereddict的一个方便类

当然,您可以如上所述导入OrderedDistict并使用它,但如果您不需要往返,也不需要在字典中保留顺序,也就是说,可以使用dict,只需使用标准加载程序:

data = yaml.load(open('testingyaml.yaml'))
print(type(data))
印刷品:

<type 'dict'>
我建议不要使用PyYAML进行降级:它只实现了旧的1.1版本的YAML,尽管ruamel.YAML是PyYAML的一个派生版本,但由于它是派生的,它解决了许多问题,这些问题最初是针对PyYAML²提出的,现在仍然与PyYAML²有关

1 ruamel.orderedict是一种快速的C语言实现,在orderedict出现在标准库中之前已经存在了几年,因为标准库版本有一小部分功能,直到Python 3.5是纯Python的慢速版本,我才真正选择切换到orderedict。
²但我有偏见,因为我是ruamel.yaml的作者,知道它需要更多的文档。

发生了一些奇怪的事情,或者您没有使用代码示例加载该文件,然后从数据中获得打印。如果您确实在使用yaml.load_,那么所有这些都将返回一个生成器对象,该对象允许您跨过该文件中的1个或多个yaml文档。因为您没有使用,所以使用load_all没有什么意义:

给出: 发展 上述示例中的实际数据类型是ruamel.yaml.comments.CommentedMap,如果执行以下更简单的操作,也会得到该类型的数据:

data = yaml.load(open('testingyaml.yaml'), Loader=yaml.RoundTripLoader)
print(type(data))
它打印的不是load的用法,而是loadall的用法

CommentedMap来自ordereddict

因为对于往返,您使用的是RoundTripLoader ruamel.yaml需要保留订单,并有一个地方附上任何评论和其他要保留的信息,这在使用dict.ordereddict时是不可能的。如果ruamel.ordereddict可用或ordereddict,ordereddict只是ruamel.ordereddict的一个方便类

当然,您可以如上所述导入OrderedDistict并使用它,但如果您不需要往返,也不需要在字典中保留顺序,也就是说,可以使用dict,只需使用标准加载程序:

data = yaml.load(open('testingyaml.yaml'))
print(type(data))
印刷品:

<type 'dict'>
我建议不要使用PyYAML来降级:它只实现了旧的1.1版本的YAML,尽管ruamel.YAML是PyYAML的派生版本,但由于它是派生的,它解决了很多问题,这些问题最初是针对p提出的,现在仍然与p有关 yYAML²

1 ruamel.orderedict是一种快速的C语言实现,在orderedict出现在标准库中之前已经存在了几年,因为标准库版本有一小部分功能,直到Python 3.5是纯Python的慢速版本,我才真正选择切换到orderedict。
²但我有偏见,因为我是ruamel.yaml的作者,知道它需要更多的文档。

它是否可能将所有内容都转换为小写?当您使用typedata时,您会得到什么?我猜pyYaml使用的是自己的字典类型,而不是collections.OrderedDict。这是pyYaml还是ruamel.yaml?我是在混合ruamel.yaml和pyYaml。现在一切都搞定了!使用简单的pyYaml load_all,它返回dict类型的数据,解决了我的问题。非常感谢大家的快速回复。拯救了我的一天。有可能它会把所有的东西都转换成小写吗?当你使用typedata时,你会得到什么?我猜pyYaml使用的是自己的字典类型,而不是collections.OrderedDict。这是pyYaml还是ruamel.yaml?我是在混合ruamel.yaml和pyYaml。现在一切都搞定了!使用简单的pyYaml load_all,它返回dict类型的数据,解决了我的问题。非常感谢大家的快速回复。救了我一天,非常感谢。现在一切都搞定了。使用基本的pyYaml load_all方法,并获得所需的输出以供进一步处理。非常感谢。现在一切都搞定了。使用基本的pyYaml load_all方法并获得所需的输出以供进一步处理。