【发布时间】:2020-09-14 05:40:48
【问题描述】:
我有以下 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
如果任何 test_name 具有重复值,我必须发出警报。例如,在上述情况下,由于重复 Test_Name1,这将引发警报。 test_name 和 test_id 在文件中应该具有唯一值。 我尝试将 yaml 转换为字典,然后找出重复值,这显示错误为 TypeError: unhashable type: '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 文件中删除“-”。基本上我无法更改文件中的任何内容,这是通过代码完成的。 :)
【问题讨论】:
-
for key in data:迭代单个值,"Tests";data[key]是一个列表。您不需要更改 YAML 结构,但您需要知道它解析为什么。 -
for key in data: mapping[key] = [] mapping[key].extend(data[key]) -- 也没有按预期工作
-
@jonrsharpe for key, value in data.items(): mapping.setdefault(value, set()).add(key) - 这也没有用
-
我强烈建议您进行基本调试 - 也许添加
prints 以查看您实际使用的内容。如果您不熟悉 YAML 语法,请确保您了解该数据的实际形状。 -
您是要删除重复项还是只显示一条消息,哪个是重复项。添加预期输出