python 字典项交集
假设我有一个字典,内容像这样:
aDict[1] = '3,4,5,6,7,8'
aDict[5] = '5,6,7,8,9,10,11,12'
aDict[n] = '5,6,77,88'
这个字典的键是随便的,可以有任意多个。我想要考虑字典里的每一个值。
我想把每个字符串当作用逗号分隔的值,然后找出整个字典中所有值的交集(也就是所有字典值中共同存在的元素)。所以在这个例子中,答案就是'5,6'。我该怎么做呢?
5 个回答
1
Python中的Set
(集合)非常适合这个任务。我们来看下面的(伪代码):
intersections = None
for value in aDict.values():
temp = set([int(num) for num in value.split(",")])
if intersections is None:
intersections = temp
else:
intersections = intersections.intersection(temp)
print intersections
3
首先,你需要把这些转换成真正的列表。
l1 = '3,4,5,6,7,8'.split(',')
然后你可以使用集合来找交集。
result = set(l1) & set(l2) & set(l3)
4
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码时出现了小失误。
例如,变量是用来存储数据的,就像一个盒子,可以放东西进去,也可以拿出来。如果我们不小心把盒子里的东西搞混了,或者没有正确地标记盒子,那么在需要的时候就会找不到想要的东西。
另外,函数就像是一个小工具,可以帮助我们完成特定的任务。我们只需要告诉它需要什么输入,它就会给我们想要的结果。如果我们没有正确使用这个工具,或者输入了错误的信息,结果就可能不对。
所以,遇到问题时,首先要冷静下来,仔细检查自己的代码,看看是不是哪里出错了。多尝试几次,慢慢就能找到解决办法。
from functools import reduce # if Python 3
reduce(lambda x, y: x.intersection(y), (set(x.split(',')) for x in aDict.values()))