Python集比较

2024-04-24 19:49:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个集合,每一个都包含许多元组:

s1 = set([('a','b','c'), ('d','e','f'), ('g','h','i'), ('j','k','l'), ('m','n','o')])
s2 = set([('a','y','z'), ('p','q','r'), ('s','t','u'), ('v','w','x')])

每个元组包含多个字符串(在本例中为3)。每个元组也有一个id,它是第一个元素。我想检查哪一个元组在两个集合中具有相同的id,但是以下值不同,比如s1中的(a,b,c)和s2中的(a,y,z),并输出这个值。在

你必须要有精确的元组来检查它是否在使用in的集合中,然后如何访问这个元组来打印它?在


Tags: 字符串inid元素元组sets2s1
3条回答

我认为将集合转换为dicts可以简化搜索:

>>> d1 = {t1[0]: (t1[1], t1[2]) for t1 in s1}
>>> d1
{'a': ('b', 'c'), 'j': ('k', 'l'), 'm': ('n', 'o'), 'd': ('e', 'f'), 'g': ('h', 'i')}
>>> d2 = {t2[0]: (t2[1], t2[2]) for t2 in s2}
>>> d2
{'a': ('y', 'z'), 'p': ('q', 'r'), 's': ('t', 'u'), 'v': ('w', 'x')}
>>> [(k2, d2[k2]) for k2 in d2 if k2 in d1 and d2[k2] != d1[k2]]
[('a', ('y', 'z'))]

将集合转换为dict,使用id作为dict的键:

s1d = {}
for e in s1:
  s1d[e[0]] = e

那就容易了。在

Do you have to have the exact tuple to check if it's in the set using in

是的,你知道。如果只比较一部分项,那么使用dict,将可比较部分作为键,其余部分作为值。在

从示例代码开始

d1 = dict((x[0], x) for x in s1)
# similarly, make d2 from s2

然后可以检查a in d1,用d1[a]获取相关联的三元组,等等

相关问题 更多 >