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(并且对答案不做任何处理)