Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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解析yaml文件以查找重复值_Python_Parsing_Yaml - Fatal编程技术网

使用python解析yaml文件以查找重复值

使用python解析yaml文件以查找重复值,python,parsing,yaml,Python,Parsing,Yaml,我有下面的Yaml文件 Tests: - Test: test_name: Test_Name1 test_id: 1 test_desc: Test Name1 - Test: test_name: Test_Name2 test_id: 2 test_desc: Test Name2 - Test: test_name: Test_Name1 test_id: 3 test_desc: Test Name3 如果

我有下面的Yaml文件

Tests:
 - Test:
    test_name: Test_Name1
    test_id: 1
    test_desc: Test Name1
 - Test:
    test_name: Test_Name2
    test_id: 2
    test_desc: Test Name2
 - Test:
    test_name: Test_Name1
    test_id: 3
    test_desc: Test Name3
如果任何一个测试名称有重复值,我必须发出警报。例如,在上述情况下,由于重复测试_Name1,这将引发警报。测试名称和测试id在文件中应具有唯一值。 我曾尝试将yaml转换为dictionary,然后找出重复的值,这将错误显示为TypeError:Unhabable类型:“list”

下面是我的代码

import yaml

mapping = {}
stream = open('C:/modelsData/work/tests.yaml', 'r')
data = yaml.load(stream)
for key in data:
    mapping.setdefault(data[key], set()).add(key)
print(mapping)
result = filter(lambda x: len(x)>1, mapping.values())
print("Duplicated Values ", list(result))

请注意-我无法从yaml文件中删除“-”。我无法更改文件中的任何内容,这将通过代码完成。:)

打印转换结果并使用它,尝试一步一步地获得结果。我就是这样想出来的:

import yaml

stream = open('save_text.txt', 'r')
data = yaml.load(stream, Loader=yaml.FullLoader)

t_list = data["Tests"]

spot_duplicates = {}
for test in t_list:

    if test["Test"]["test_name"] not in spot_duplicates:
        spot_duplicates[test["Test"]["test_name"]] = 1
    else:
        spot_duplicates[test["Test"]["test_name"]] += 1

for dup in spot_duplicates:
    if spot_duplicates[dup] > 1:
        print("Duplicated value", dup)

对于输入数据:
迭代单个值,
“测试”
<代码>数据[键]是一个列表。您不需要更改YAML结构,但需要知道它解析为什么。对于键入数据:mapping[key]=[]mapping[key]。extend(data[key])--也不起作用expected@jonrsharpe对于键,data.items()中的值:mapping.setdefault(value,set()).add(键)--这也没有成功--我强烈建议进行基本调试-可能添加
print
s以查看您实际使用的是什么。如果您不熟悉YAML语法,请确保您了解该数据的实际形状。是要删除重复项还是只显示一条消息,其中一条是重复项。添加预期的输出