我有一本字典:
XY_dict = {1: [(12, 55),(13, 55)],
2: [(14, 55),(15, 57)],
3: [(14, 55),(15, 58)],
4: [(14, 55),(16, 55)]}
我想找出哪些键的值元组是唯一的(不在任何其他键的值中)。从样本字典,关键1是独一无二的,因为既没有(12, 55)
,也不(13, 55)
存在任何其他字典的关键。通过获取具有共享值的键列表,我可以稍后将结果取反,并获得唯一的键。
我正在使用列表推导来获取具有共享值的键:
keys_shared_values = [k1 for k1,v1 in XY_dict.iteritems()
for k,v in XY_dict.iteritems()
for XY_pair in v
if XY_pair in v1 and k != k1 and k1 not in keys_shared_values]
结果,我得到的结果是[2, 2, 3, 3, 4, 4]
我希望不要插入重复项(因为我正在评估键值是否在结果列表中)。我可以通过运行来解决此问题list(set(shared_values))
,但想了解我的代码有什么问题。
问题是keys_shared_values
直到您完成理解才是空的,所以您k1 not in keys_shared_values
将始终返回True
。您无法参考当前的理解。最好的选择就是set
按照您的建议进行转换。
如果需要此功能,应将代码更改为循环:
keys_shared_values = []
for k, v in XY_dict.iteritems():
for k1, v1 in XY_dict.iteritems():
for XY_pair in v:
if XY_pair in v1 and k != k1 and k1 not in keys_shared_values:
keys_shared_values.append(k1)
print keys_shared_values
结果:
[3, 4, 2]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句