计数两个同步列表
一些和相关价值的发病率我有两个列出的长度是相同的:计数两个同步列表
alist = ['XX', 'HH', 'GG', 'XX', 'II', 'PP', 'LL', 'TT', 'KK', 'XX']
blist = [2, 3, 5, 5, 9, 8, 9, 4, 7, 2]
我想知道ALIST有blist相同数量的什么值。我希望结果如下所示:
2 = XX; 3 = HH; 5 = GG,XX; 9 = II,LL; 8 = PP; 4 = TT; 7 = KK
我解决这样的:
from collections import defaultdict
adict = {}
a = zip(blist, alist)
for key, value in a:
adict.setdefault(k, []).append(v)
其给出这样的结果: adict:
{2: ['XX', 'XX'], 3: ['HH'], 4: ['TT'], 5: ['GG', 'XX'], 7: ['KK'], 8: ['PP'], 9: ['II', 'LL']}
,但我不想两次相同的值,例如2:[” XX','XX'] - 我想有2:['XX']。
I tried this using 'set' before the list of values:
a = zip(blist, alist)
for key, value in a:
a.setdefault(k, set[]).append(v)
但它抱怨... 任何想法?
我个人使用的Martijn的defaultdict
的做法,但我想我会解决你目前的尝试中的问题。
与您的代码的问题:
a = zip(blist, alist)
for key, value in a:
a.setdefault(k, set[]).append(v)
是:
- 的
zip
后,a
现在是一个列表,所以它不会支持.setdefault
-
k
不使用在for循环中 - 应该是key
-
v
未使用for循环=应该value
-
set[]
无效synatx - 创建一个新的set
- 使用set()
- 一个
set
不具有.append
- 而不是你想用add
更正后的代码:
d = {}
a = zip(blist, alist)
for key, value in a:
d.setdefault(key, set()).add(value)
适应下面根据需要打印:
for k, v in d.iteritems():
if k > 5:
print '{0}: {1}'.format(k, ','.join(v))
使用您导入,而是以其他方式忽略defaultdict
类型:
from collections import defaultdict
a = defaultdict(set)
for k, v in zip(blist, alist):
a[k].add(v)
结果:
>>> a
defaultdict(<type 'set'>, {2: set(['XX']), 3: set(['HH']), 4: set(['TT']), 5: set(['GG', 'XX']), 7: set(['KK']), 8: set(['PP']), 9: set(['II', 'LL'])})
defaultdict
是dict
一个子类,另有同样的方式表现。
这给了我:'defaultdict(
@glormph:确实,哎呀,纠正了。我对'.update()'做了一个假设,它不适用于defaultdict。 – 2013-03-12 15:37:28
很酷:)但是当我打印出这个文件,它也打印'集',如:2:set(['XX'] ),3:set(['HH'])等。为什么打印'set'? – edg 2013-03-12 15:54:13
迭代它取钥匙,价值和格式那些你想要的事先 – 2013-03-12 15:56:15
f.ex.如果我这样做: 如果键:> 如果键> 5: 打印键,d [键]键中d.keys(): 如果键> 5: 打印键,d [键] 我得到: 7:组([ 'KK']) 8:组([ 'PP']) 9:组([ 'II', 'LL']) 如何将我得到: 7:'KK' 8:'PP' 9:'II','LL' – edg 2013-03-12 15:58:30