我有两本词典:
concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}
我已经返回了凸字典中具有最大长度值的键:
max_lens = [1, 6, 7, 8, 9, 10, 11]
对于max_lens
中的每个号码,我想检查concave
中的值中的值中是不存在的。 {1}}作为convex
中的键存在。
所以在这个例子中,' 1'会满足这个条件,因为它不包含在concave
中作为键,但它在concave
中的值是(即2,3,4和5)。
我试图找出如何使用for loops / if语句来解决这个问题:
convex
在我完全糊涂之前,这就是我所得到的。除了使用多个for循环和if语句之外,必须有一种更简单的方法吗?
我有点像一个python noob,很抱歉,如果这让人感到困惑!
答案 0 :(得分:2)
我认为我明白了(为了记录,我更喜欢明确的concave.keys()
)
result_dict = {}
for convex_key in max_lens:
result_dict[convex_key] = convex_key not in concave.keys() \
and all(convex_val in concave.keys()
for convex_val in convex[convex_key])
编辑(见评论)
for convex_key in max_lens:
if convex_key not in concave.keys() and \
all(convex_val in concave.keys() for convex_val in convex[convex_key]):
top_face = convex_key
break
答案 1 :(得分:1)
将这个问题拼写成步骤总是有帮助:
l
max_lens
长度
l
中是否存在concave
但convex
中是否存在convex[l]
。这里需要这两个条件的结合。如果失败,请不要继续。 concave
中是否存在concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}
max_lens = [1, 6, 7, 8, 9, 10, 11]
for l in max_lens:
if l not in concave and l in convex and all(v in concave for v in convex[l]):
print(l)
的所有值。 <强>演示:强>
1
<强>输出:强>
eslint-plugin-vue
答案 2 :(得分:0)
使用简单的forloop。
concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}
max_lens = [1, 6, 7, 8, 9, 10, 11]
for i in max_lens:
if (i not in concave): #Check if not in key.
if convex[i] in concave.values(): #Check Value.
print i
<强>输出强>:
1
答案 3 :(得分:0)
你可以理解:
[i for i in max_lens if i not in concave and convex[i] in concave.values()]
答案 4 :(得分:0)
如果你不容易理解问题,通常会把它分成几个小问题:
def is_no_key_in(v, _dict):
return key not in _dict
def no_key_values(_list, _dict):
return [ v for v in _list if is_no_key_in(v, _dict) ]
def union(a_lst, b_lst):
return [ a for a in a_lst if a in b_lst]
def is_subset(a_lst, b_lst):
return len([a for a in a_lst if a not in b_lst]) == 0
def satisfies_conditions(max_lens):
for lens in no_key_values(max_lens, concave):
if is_subset(convex[lens], concave.keys())
yield lens
result = [ lens for lens in satisfies_conditions(max_lens) ]
result
现在包含满足您条件的所有镜头,如果您想改变条件,可以轻松完成。如果您的代码有效,您可以继续并重构它。例如,您可能不需要is_no_key_in
,因为它是一个非常简单的功能。然后继续并将其内联到no_key_values
:
def no_key_values(_list, _dict):
return [ v for v in _list if v not in _dict ]
如果你在重构之前编写一些测试(甚至编写代码),你可以确保你的重构不会引入错误。然后逐步简化代码。也许你最终会得到一个像其他答案中提出的那样简单的解决方案。
(我希望这也可以帮助你解决未来的问题: - ))