2

別のPythonの質問をOK...

私は口述を持っています:

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化されたアイテムの交差を抽出するにはどうすればよいですか?したがって、この場合、答えは「5,6」になります。

ありがとう

4

5 に答える 5

4
from functools import reduce # if Python 3

reduce(lambda x, y: x.intersection(y), (set(x.split(',')) for x in aDict.values()))
于 2011-10-14T09:29:13.067 に答える
3

まず、これらを実際のリストに変換する必要があります。

l1 = '3,4,5,6,7,8'.split(',')

次に、セットを使用して交差を行うことができます。

result = set(l1) & set(l2) & set(l3)
于 2011-10-14T09:28:47.860 に答える
1

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
于 2011-10-14T09:29:36.920 に答える
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
于 2011-10-14T09:32:49.397 に答える
0

セットはいくつでも受け入れるので、 :set.intersection()を使用せずに実行できます。reduce()

set.intersection(*(set(v.split(",")) for v in aDict.values()))

このバージョンは、空の場合は機能しないことに注意してくださいaDict

Python 3を使用していて、ディクショナリ値がbytes文字列ではなくオブジェクトである場合は、b","の代わりにで分割して","ください。

于 2011-10-14T12:01:22.610 に答える