gpt4 book ai didi

python - 根据每个元组中存在的元素在列表中查找互斥元组的优雅方法

转载 作者:行者123 更新时间:2023-11-30 22:21:27 25 4
gpt4 key购买 nike

我想将以下两个元组相减以获得所需的结果(也包含在下面)。请注意,减法仅基于 (a, b) 中的 a。

# the two tuples
first = [(('the',), 431), (('and',), 367)]
second = [(('the',), 100), (('hello',), 100)]

# the desired result
first = [(('and',), 367)]
second = [(('hello',), 100)]

我尝试了map(operation.sub,first,second),但没有成功。尝试b = map(sub,first,second),但没有成功。表示不支持 - 的操作数类型:“元组”和“元组”

感谢您提前提供的帮助和时间。

编辑:对我最有帮助的解决方案包括创建两个元组的交集并从每个元组中减去它。

编辑:我想根据常见项目进行减去。希望能澄清这一点。

最佳答案

也许关注就是你想要的:

# the two tuples
first = [(('the',), 431), (('and',), 367)]
second = [(('the',), 100), (('hello',), 100)]

first_keys = set(_[0][0] for _ in first)
second_keys = set(_[0][0] for _ in second)

first = [_ for _ in first if _[0][0] not in second_keys]
second = [_ for _ in second if _[0][0] not in first_keys]
<小时/>
multi = [
[(('the',), 431), (('and',), 367)],
[(('the',), 100), (('hello',), 100)]
]

def get_key(x):
return x[0][0]

def occur_counts(set_x):
cnt = {}
for x in set_x:
cnt[get_key(x)] = cnt.get(get_key(x), 0) + 1
return cnt


def do_one(single, total_cnt):
single_cnt = occur_counts(single)
return [_ for _ in single if single_cnt[get_key(_)] == total_cnt[get_key(_)]]


total_cnt = occur_counts(sum(multi, []))

answer = [do_one(_, total_cnt) for _ in multi]

关于python - 根据每个元组中存在的元素在列表中查找互斥元组的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641883/

25 4 0