好的另一个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'。
由于
答案 0 :(得分:4)
from functools import reduce # if Python 3
reduce(lambda x, y: x.intersection(y), (set(x.split(',')) for x in aDict.values()))
答案 1 :(得分:3)
首先,您需要将这些转换为真实列表。
l1 = '3,4,5,6,7,8'.split(',')
然后你可以使用集来做交集。
result = set(l1) & set(l2) & set(l3)
答案 2 :(得分: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 :(得分:0)
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
答案 4 :(得分:0)
由于set.intersection()
接受任意数量的集合,您可以在不使用reduce()
的情况下完成:
set.intersection(*(set(v.split(",")) for v in aDict.values()))
请注意,此版本不适用于空aDict
。
如果您使用的是Python 3,并且字典值是bytes
个对象而不是字符串,则只需在b","
而不是","
进行拆分。