Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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 查找同一字典中键和值之间的差异_Python_Dictionary - Fatal编程技术网

Python 查找同一字典中键和值之间的差异

Python 查找同一字典中键和值之间的差异,python,dictionary,Python,Dictionary,我有一个具有类似键和值的字典,我正在查找字典中的值中没有出现的键 这是我打印字典时的输出,d1: d1= {"A": ["J"], "B": ["A"], "C": ["A", "D", "J"], "D": ["A", "J"]} 根据上面的代码,键“B”和“C”将是值中没有出现的两个键,我希望能够将它们打印在列表中 这是我的代码: keysNotInValues = [] d1_keys = (d1.keys()) for key in d1_keys: flag = True

我有一个具有类似键和值的字典,我正在查找字典中的值中没有出现的键

这是我打印字典时的输出,
d1

d1= {"A": ["J"], "B": ["A"], "C": ["A", "D", "J"], "D": ["A", "J"]}
根据上面的代码,键“B”和“C”将是值中没有出现的两个键,我希望能够将它们打印在列表中

这是我的代码:

keysNotInValues = []
d1_keys = (d1.keys())

for key in d1_keys:
    flag = True
    for keys,values in d1.items():
        if key in values:
            flag == False

    if flag == True:
        keysNotInValues.append(key)

print(keysNotInValues)
我收到的输出只是所有键的列表

['A', 'B', 'C', 'D']
我想要输出:

['B', 'C']

我认为问题的本质是在每次循环迭代时重置
flag=True
。使用该代码结构,您不会找到“不在任何值中的键”,而是找到“至少一个值中缺少的键”。由于至少一个值中缺少每个键,因此函数将返回所有键

一种方法是使用Python内置的
set()
对象,使用内置的set算术方法:

d1 = {"A": ["J"], "B": ["A"], "C": ["A", "D", "J"], "D": ["A", "J"]}

set_of_keys = set(d1.keys())

set_of_values = set()
for vals in d1.values():
    set_of_values.update(vals)

print(set_of_keys)
print(set_of_values)

values_that_arent_keys = set_of_values - set_of_keys
print(values_that_arent_keys)

keys_that_arent_values = set_of_keys - set_of_values
print(keys_that_arent_values)
给出:

{'D', 'C', 'B', 'A'}
{'J', 'D', 'A'}
{'J'}
{'C', 'B'}

如果要按字母顺序打印集合,可以使用
sorted()

我认为问题的本质是在每次循环迭代时重置
flag=True
。使用该代码结构,您不会找到“不在任何值中的键”,而是找到“至少一个值中缺少的键”。由于至少一个值中缺少每个键,因此函数将返回所有键

一种方法是使用Python内置的
set()
对象,使用内置的set算术方法:

d1 = {"A": ["J"], "B": ["A"], "C": ["A", "D", "J"], "D": ["A", "J"]}

set_of_keys = set(d1.keys())

set_of_values = set()
for vals in d1.values():
    set_of_values.update(vals)

print(set_of_keys)
print(set_of_values)

values_that_arent_keys = set_of_values - set_of_keys
print(values_that_arent_keys)

keys_that_arent_values = set_of_keys - set_of_values
print(keys_that_arent_values)
给出:

{'D', 'C', 'B', 'A'}
{'J', 'D', 'A'}
{'J'}
{'C', 'B'}

如果要按字母顺序打印集合,可以使用
sorted()

可以使用集合计算两个集合之间的差异

keys = set(d1)
values = set(item for sublist in d1.values() for item in sublist)
print(keys - values)  # {'C', 'B'}

可以使用集合计算两个集合之间的差异

keys = set(d1)
values = set(item for sublist in d1.values() for item in sublist)
print(keys - values)  # {'C', 'B'}
只是做了一点修改


只是做了一点修改。

flag==False
这可能是您的输入错误。如果要将标志设置为false,请仅使用一个等号。否则,此代码只询问flag是否为false(与答案无关)。
flag==false
这可能是您的输入错误。如果要将标志设置为false,请仅使用一个等号。否则,此代码只询问标志是否为false(并且对答案不做任何处理)