別の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」になります。
ありがとう
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
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
セットはいくつでも受け入れるので、 :set.intersection()
を使用せずに実行できます。reduce()
set.intersection(*(set(v.split(",")) for v in aDict.values()))
このバージョンは、空の場合は機能しないことに注意してくださいaDict
。
Python 3を使用していて、ディクショナリ値がbytes
文字列ではなくオブジェクトである場合は、b","
の代わりにで分割して","
ください。