Python键存在:键是整数和字符串的元组

2 投票
2 回答
10601 浏览
提问于 2025-04-17 23:18

我有一个用Python创建的字典,这个字典的键是一个元组,而值是一个列表。这个元组里面包含了整数和字符串。为了更好地说明,我给个简单的例子:

>>> x = {(1, 'test'): ['marry', 'tom']}

我想建立一个逻辑,如果字典键中的元组的第一个元素存在,就执行我的逻辑:

所以我尝试了以下代码:

>>> if 1 in x:
...     print x
... 

但是没有成功。

然后我做了以下测试,看看当键不是元组时,'in'这个函数是否能正常工作,结果是可以的:

>>> y = {}
>>> y[1] = []
>>> y[1].append("tom")
>>> if 1 in y:
...     print y
... 
{1: ['tom']}

我该如何检查字典中是否存在一个键,如果这个键恰好是元组的第一个元素呢?

2 个回答

11

你需要检查一下完整的键

(1, 'test') in x

元组键并没有什么特别的,使用元组作为键并不意味着元组里的两个元素会变成独立的键。

如果你想要1'test'都作为键,你需要把它们单独添加为键,或者分别检查字典里的每一个键。

你可以创建一个字典的子类,来扩展它以支持你自己的用法:

class tupledict(dict):
    def __contains__(self, key):
        if super(tupledict, self).__contains__(key):
            return True
        return any(key in k for k in self)

演示:

>>> x = tupledict({(1, 'test'): ['marry', 'tom']})
>>> 1 in x
True
>>> (1, 'test') in x
True
9

如果你只知道密钥的第一部分,你可以检查一下是否有任何密钥包含这个部分:

if any(k[0] == 1 for k in x):

或者,你可以获取一个匹配的密钥列表:

keys = [k for k in x if k[0] == 1]

撰写回答