python交叉的dict项目

时间:2011-10-14 09:23:04

标签: python intersect

好的另一个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'。

由于

5 个答案:

答案 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","而不是","进行拆分。