所以我想要做的是如果我有一个列表作为其值列表,我必须找到并打印唯一键或唯一值: 例如:
my_dict = {dog:[cat,rat,bird],cat:[dog,bird,rat],mouse:[fish,fly,horse]}
我希望找到的是
哪些键不作为值存在并打印出来(这会导致鼠标),
哪些值不作为键存在(这将导致鱼,苍蝇,马,鼠,鸟)
然后将每个结果存储在新列表中
我的尝试看起来像是:
new_list = []
for i in my_dict.keys():
if i not in my_dict.values():
new_list = my_dict.values(i)
或沿着这些方向的东西
答案 0 :(得分:0)
您可以使用集合轻松高效地执行此操作:
>>> my_dict = {'dog': ['cat', 'rat', 'bird'], 'cat': ['dog', 'bird', 'rat'], 'mouse': ['fish', 'fly', 'horse']}
>>> values = {value for l in my_dict.values() for value in l}
>>> keys = set(my_dict)
>>> values - keys
set(['fly', 'horse', 'fish', 'rat', 'bird'])
>>> keys - values
set(['mouse'])
答案 1 :(得分:0)
首先,您可以使用itertools.chain.from_iterable
展平所有值:
>>> import itertools
>>> my_dict = {'dog':['cat','rat','bird'],'cat':['dog','bird','rat'],'mouse':['fish','fly','horse']}
>>> values = list(itertools.chain.from_iterable(my_dict.values()))
>>> print(values)
['cat', 'rat', 'bird', 'dog', 'bird', 'rat', 'fish', 'fly', 'horse']
或使用其他方法:
>>> values = [lst for item in my_dict.values() for lst in item]
>>> print(values)
['cat', 'rat', 'bird', 'dog', 'bird', 'rat', 'fish', 'fly', 'horse']
>>> values = sum(my_dict.values(), [])
>>> print(values)
['cat', 'rat', 'bird', 'dog', 'bird', 'rat', 'fish', 'fly', 'horse']
然后,您可以提取不存在的值作为值,以及不存在的值作为键:
>>> only_keys = [key for key in my_dict if key not in values]
>>> print(only_keys)
['mouse']
>>> only_values = [value for value in values if value not in my_dict]
>>> print(list(set(only_values)))
>>> ['rat', 'bird', 'fish', 'fly', 'horse']
注意:您必须将set()
应用于only_values
,因为值可以在字典中重复,而密钥则不能。
答案 2 :(得分:0)
输入数据:
my_dict = {"dog": ["cat","rat","bird"],
"cat": ["dog","bird","rat"],
"mouse": ["fish","fly","horse"]}
在键中创建一组所有动物:
animals_keys = set(my_dict.keys())
在值中创建一组所有动物:
animals_values = set()
for values in my_dict.values():
animals_values.update(values)
用钥匙检查动物,但不检查值:
animal_keys - animal_values
['小鼠']
反过来说,动物是价值观而不是钥匙:
animal_values - animal_keys
[&#39; fly&#39;,&#39; rat&#39;,&#39; fish&#39;,&#39; bird&#39;,&#39; horse&#39;] < / p>
这是Python 3。