好的,另一个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'
n 可以是任何限制,但键不按顺序排列。
如何提取 csv'd 项目的交集?所以在这种情况下,答案是“5,6”。
谢谢
from functools import reduce # if Python 3
reduce(lambda x, y: x.intersection(y), (set(x.split(',')) for x in aDict.values()))
首先,您需要将这些转换为真实列表。
l1 = '3,4,5,6,7,8'.split(',')
然后你可以使用集合来做交集。
result = set(l1) & set(l2) & set(l3)
PythonSet
非常适合该任务。考虑以下(伪代码):
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
由于set.intersection()
接受任意数量的集合,您可以不使用任何方法reduce()
:
set.intersection(*(set(v.split(",")) for v in aDict.values()))
请注意,此版本不适用于空的aDict
.
如果您使用的是 Python 3,并且您的字典值是bytes
对象而不是字符串,则只需拆分 atb","
而不是","
.
result = None
for csv_list in aDict.values():
aList = csv_list.split(',')
if result is None:
result = set(aList)
else:
result = result & set(aList)
print result