作者mikapauli (cablin)
看板Python
标题Re: [问题] 如何将dict的values取set
时间Mon Feb 20 21:46:52 2012
建议你把完整的code从头到尾贴上来,或是直接找个空间上传你的档案
另外
(lambda x: set(x))==set
(lambda x,y: x.intersection(y))==set.intersection
这里用lambda非常多余
加上set.intersection本身就可以接受多个参数
因此写成set.intersection(*map(set, target.values()))就好
※ 引述《kadodo (想办法突破)》之铭言:
: s=map(lambda x : set(x), target.values())
: print(reduce(lambda x,y: x.intersection(y), s))
: 以上这样OK 有PRINT出正确结果
: s=map(lambda x : set(x), target.values())
: var_a = reduce(lambda x,y: x.intersection(y), s)
: print(var_a)
: 换成以上三行,想用一个变数去接 就会得到以下错误
: var_a = reduce(lambda x,y: x.intersection(y), s)
: 错误讯息 : TypeError: reduce() of empty sequence with no initial value.
: ※ 引述《kadodo (想办法突破)》之铭言:
: : 再请问一下
: : 我想用一个变数来接
: : var_a = reduce(lambda x,y: x.intersection(y), s)
: : TypeError: reduce() of empty sequence with no initial value.
: : 请问该如何解决?
: : 我用Help去看 还是看不懂
: : reduce(function, sequence[, initial]) -> value
: : Apply a function of two arguments cumulatively to the items of a sequence,
: : from left to right, so as to reduce the sequence to a single value.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.217.2
1F:推 kadodo:请问set.intersection(*map(set, ds.values())) 这行是什麽 02/21 15:29
2F:→ kadodo:意思呢? 尤其是那个*号 02/21 15:30
3F:→ mikapauli:f(a,b,c,...)==f(*(a,b,c,...)) 02/21 18:03
4F:→ mikapauli:map前的*即是把map产生的iterator做unpack的动作 02/21 18:14
5F:推 kadodo:请问我如果是要得到联集怎麽写? 先前讨论是得到交集的写法 02/21 18:40
6F:推 kadodo:用set.union吗? 02/21 19:37
7F:→ mikapauli:是的 02/21 21:08
8F:→ mikapauli:另外在一般的运算可以用&(交集)和|(联集)等来写 02/21 21:10
9F:→ mikapauli:set.__and__==set.intersection, set.__or__==set.union 02/21 21:11
10F:推 kadodo:感谢帮忙 ~ 我会试试看 02/21 22:45
11F:→ mikapauli:另外,这里如果有需要用lambda,那还不用comprehension 02/23 01:15
12F:→ mikapauli:真正要lambda的地方大概是让常数有函式介面(变成常函式) 02/23 01:17
13F:→ mikapauli:更正,不如用comprehension 02/23 18:06