Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 如果键值';s值是单独列表的成员_Python_Python 3.x - Fatal编程技术网

Python 如果键值';s值是单独列表的成员

Python 如果键值';s值是单独列表的成员,python,python-3.x,Python,Python 3.x,假设我有一个有序的口述: import collections collections.OrderedDict([('great_key', {'keyword': {'blue', 'yellow'}}), ('super_key', {'keyword': {'lock', 'door'}})]) 和一个潜在匹配项列表:[红,红,蓝,一] 我需要填充两个列表: correct\u key=[]或不正确的匹配=[] 如果潜在匹配项是dict中某个键的关键字,则其键进入correct\u

假设我有一个有序的口述:

import collections  
collections.OrderedDict([('great_key', {'keyword': {'blue', 'yellow'}}), ('super_key', {'keyword': {'lock', 'door'}})])
和一个潜在匹配项列表:
[红,红,蓝,一]

我需要填充两个列表:
correct\u key=[]
不正确的匹配=[]


如果潜在匹配项是dict中某个键的关键字,则其键进入
correct\u key
,否则该词进入
correct\u match

此示例的结果应为:
correct\u key=[great\u key]
不正确的匹配=[red,red,one]

以下是我尝试过的:

correct = []  
incorrect = []  
for word in potential_matches:
    for key, value in ordered_dict.items():
        if word in value["keyword"] and word not in correct:
            correct.append(word)
        elif word not in value["keyword"] and word not in correct and word not in incorrect:
            incorrect.append(word)  
这不起作用,而且似乎也没有效率

它不能是一个集合,因为它需要保持顺序,重复项和列表中的多个项都可以。
它不应该在第一眼看到匹配时返回,因为dict中所有匹配的项都应该在最终列表中

基本上,所有不匹配的剩余单词都应该直接进入另一个列表

完成这项工作最有效(且可读)的方法是什么


注意:我以前问过类似的问题,尽管在这些情况下,情况和答案要求使用python集,因为项目是唯一的,或者是关键字而不是键

基于运行您的代码,我认为没有匹配项

>>> for key in f:
...   print(f[key])
... 
{'keywords': {'blue', 'yellow'}}
{'keywords': {'door', 'lock'}}
然后:

>>> for key in f:
...  v = f[key]
...  for b in v:
...   print(v[b])
... 
{'blue', 'yellow'}
{'door', 'lock'}
>>> for key in f:
...  for b in v:
...   for c in v[b]:
...    print(c)
... 
door
lock
door
lock

问题是您使用了两次关键字。将第二次迭代中的
关键字
更改为
关键字2

“如果潜在匹配项是dict中某个关键字的关键字”令人困惑。。@T.Woody我同意。但我相信这和我想表达的是相当准确的。如果
潜在匹配
中的项恰好是dict中某个键的
关键字
中的值。。。这会更好吗?我认为这个例子的答案很好地说明了预期的结果。我已经测试了一些东西,它可能是你想要的,但我想先弄清楚一些东西重复项和列表中的多个项都可以。那么这是否意味着代码可以在不正确的匹配列表中有重复的匹配项?例如:['red','one','red','one']@josephseungjaedolar这些条件只是在重复python列表的常见特性。想要明确重复项是可以的,并且在整个oDict中迭代,以避免第一眼看到匹配项就返回。@Casper是的,因为对于
f
中的每个元素,您可以将其与
潜在匹配项中的每个元素进行比较。也就是说,
f
中的
n
元素和
potential\u中的
n
元素是匹配的
。您的答案不会将匹配的键排序到一个列表中,而将不匹配的键排序到另一个列表中。@Casper我可以为您编写特定的代码。。。但是我觉得我已经非常准确地指出了两次使用
关键字的主要问题。我不确定我是否遵守了
keyword
是该特定词典中键的实际名称。不可能changed@Casper如果您需要进一步的帮助,我很乐意通过电子邮件聊天帮助您:Tanner.L。Woody@gmail.com