我有字典
{('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14'): 1,
('1', '2', '83', '5', '8', '75', '9', '12', '16', '17', '18', '14'): 1,
('11', '2', '7', '5', '8', '7', '9', '12', '16', '17', '18', '14'): 1}
它的键是元组。
现在我需要搜索其中任何一个键和(83,75)
中是否存在一对元素
我还需要确保83
和75
按顺序存在于给定的密钥中。
因此,对于示例字典中的第一个键,这是正确的,但不适用于第二个键。
我知道我可以找到83
和75
的密钥,但我无法验证他们的订单。
答案 0 :(得分:5)
一个简单的for循环就足够了。如果找不到index
或ValueError
,则'83'
函数会抛出'75'
。 Pythonic这样做的方法是try-except块。:
my_dict = {('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14'): 1,
('1', '2', '83', '5', '8', '75', '9', '12', '16', '17', '18', '14'): 1,
('11', '2', '7', '5', '8', '7', '9', '12', '16', '17', '18', '14'): 1}
keys = []
for key in my_dict:
try:
if key.index('75') - key.index('83') == 1:
keys.append(key)
except ValueError:
pass
如果您想在75
之后找到包含83
的密钥,无论其接近程度如何,您都可以使用此版本:
my_dict = {('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14'): 1,
('1', '2', '83', '5', '8', '75', '9', '12', '16', '17', '18', '14'): 1,
('11', '2', '7', '5', '8', '7', '9', '12', '16', '17', '18', '14'): 1}
keys = []
for key in my_dict:
try:
if '75' in key[key.index('83'):]:
keys.append(key)
except ValueError:
pass
答案 1 :(得分:2)
也许您可以检查元组中的第一项是否在任何键中,并且一旦找到,就使用元组切片和len(query)
来检索下一个索引并检查它们的相等性。试试这个,虽然我还没有测试过。
query = ('83', '75')
mydict = {('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14'): 1,
('1', '2', '83', '5', '8', '75', '9', '12', '16', '17', '18', '14'): 1,
('11', '2', '7', '5', '8', '7', '9', '12', '16', '17', '18', '14'): 1}
for k in mydict:
try:
i = k.index(query[0])
except ValueError:
pass
else:
if k[i:i+len(query)] == query:
return k, '->', mydict[k]
答案 2 :(得分:1)
请使用元组的索引方法
例如,对于第一个关键元组{('22','83','75','5','8','7','9','12','16',' 17','22','23','24','18','14')
>>> a = ('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14')
>>> a.index("83")
1
>>> a.index("75")
2
一起,条件表达式为:
>>> "83" in a and "75" in a and a.index("83") == a.index("75") - 1
True
答案 3 :(得分:1)
如果你能发现83存在,但75不存在,那么它显然不存在一对。如果两者都存在,那么您可以测试以查看83和75的索引是否具有等于1的差异。
答案 4 :(得分:0)
基于迭代器的解决方案可能很方便
sentinel = object()
for k in d:
i = iter(k)
if '83' in i and next(i, sentinel) == '75':
print k
('22', '83', '75', '5', '8', '7', '9', '12', '16', '17', '22', '23', '24', '18', '14')