我有一个关于如何浏览字典并将其中的内容与参数列表进行比较的问题。
假设我有这本词典:让我们称之为词典setData[i]
<231931844151>
Bat: Bat = 10
Fish: Fish = 16
Dog: Dog = 5
Cat: Cat = 4
Tiger: Tiger = 11
Bird: Bird = 3
<92103884812>
Bat: Bat = Null
Fish: Fish = 24
Dog: Dog = 10
Cat: Cat = 40
Tiger: Tiger = 19
Bird: Bird = 4
此词典包含让我们称为ID号码的ID,而这些ID号码包含带参数的数据,在本例中为蝙蝠,鱼,狗,猫,虎和鸟。
现在我想将此数据及其参数与列表进行比较,以便我可以看到它们是否正确匹配。
我们的列表是这样的:让我们称之为defaultData
<ID NUMBER>
Bird = 3
Cat = 40
Dog = 10
Bat = 10
Tiger = 19
Fish = 234
所以看待它的方法是:
因此,我们可以看到列表与字典中的每个条目进行比较,如果它们不同,它将打印出哪个ID不同的参数。
到目前为止,我一直在考虑尝试以下循环:
for k in setData[i]:
if setData[i] in dataDefault:
print("If this prints then something Matches")
这只是循环的开始但是我看起来它们不匹配或者没有列表中的条目出现在字典中。可能是因为在创建字典时它会将参数添加两次?比如Bat: Bat = 10
而不是Bat = 10
?
如果有更好的方法来比较词典中的条目和我想知道的列表
谢谢!
编辑:添加我的字典和列表:
词典:
[{'Bat': 'Bat = 10', 'Fish': 'Fish = 16', 'Dog': 'Dog = 5', 'Cat': 'Cat = 4', 'Tiger': 'Tiger = 11', 'Bird': 'Bird = 3'}, {'Bat': 'Bat = Null', 'Fish': 'Fish = 24', 'Dog': 'Dog = 10', 'Cat': 'Cat = 40', 'Tiger': 'Tiger = 19', 'Bird': 'Bird = 4'}]
列表:
['<Correct Parameters>', 'Bird: Bird = 3', 'Cat: Cat = 40', 'Dog: Dog = 10', 'Bat: Bat = 10', 'Tiger: Tiger = 19', 'Fish: Fish = 234']
答案 0 :(得分:2)
问题似乎来自您的数据格式。我们应该准备数据进行比较
dataDefault = ['<Correct Parameters>', 'Bird: Bird = 3', 'Cat: Cat = 40', 'Dog: Dog = 10', 'Bat: Bat = 10', 'Tiger: Tiger = 19', 'Fish: Fish = 234']
setData = [{'Bat': 'Bat = 10', 'Fish': 'Fish = 16', 'Dog': 'Dog = 5', 'Cat': 'Cat = 4', 'Tiger': 'Tiger = 11', 'Bird': 'Bird = 3'}, {'Bat': 'Bat = Null', 'Fish': 'Fish = 24', 'Dog': 'Dog = 10', 'Cat': 'Cat = 40', 'Tiger': 'Tiger = 19', 'Bird': 'Bird = 4'}]
首先,我们通过删除“:”之前的所有内容来更改dataDefault格式:
dataDefault2 = []
for i in dataDefault:
if ": " in i:
dataDefault2.append(i.split(": ")[1])
else:
dataDefault2.append(i)
for elem in setData: # We iterate over each element of the list
for val in elem.values() : # We iterate over each value of the element dictionary
# If there is any other value which is not a dictionary it will complain with an error
if val in dataDefault2:
print("If this prints then something Matches")