作者:
ckc1ark (偽物)
2016-01-31 22:45:38※ 引述《busystudent (busystudent)》之銘言:
: hi 我想詢問list若有重複的標籤該如何相加
: 我有三組list,內容為個人所收藏的標籤與其收藏次數,如下所示:
: link_a = ['a','b','c']
: bookmark_a = ['1','2','3']
: link_b = ['b','c']
: bookmark_c = ['4','5']
: link_c = ['a']
: bookmark_c = ['6']
: 我想做些計算,得到如下面的結果
: answer_link_all = ['a','b','c']
: answer_bookmark_all = ['7','6','8']
: 其實我一開始是打算 link_a+link_b = ['a','b','c','b','c']後來發現,名稱會
: 重複,像是重複出現'b'和'c'之類的,所以打算寫一個if判斷式,可是考慮到又
: 有bookmark要去計算,就感到怪怪的,請大家給我提示,謝謝
可以試試collections.Counter 不過首先bookmark_x是數字比較好處理
from collections import Counter
link_a = ['a','b','c']
bookmark_a = [1,2,3]
link_b = ['b','c']
bookmark_b = [4,5]
link_c = ['a']
bookmark_c = [6]
counts = [dict(zip(link_a, bookmark_a)),
dict(zip(link_b, bookmark_b)),
dict(zip(link_c, bookmark_c))]
c = Counter()
map(c.update, counts)
answer_link_all, answer_bookmark_all = zip(*c.iteritems())
print answer_link_all, answer_bookmark_all
如果想用簡單的dict搞定的話 (這邊用collections.defaultdict可以再簡化一點)
total = dict()
for i in range(len(link_a)):
if link_a[i] in total:
total[link_a[i]] += bookmark_a[i]
else:
total[link_a[i]] = bookmark_a[i]
for i in range(len(link_b)):
if link_b[i] in total:
total[link_b[i]] += bookmark_b[i]
else:
total[link_b[i]] = bookmark_b[i]
for i in range(len(link_c)):
if link_c[i] in total:
total[link_c[i]] += bookmark_c[i]
else:
total[link_c[i]] = bookmark_c[i]
answer_link_all = total.keys()
answer_bookmark_all = []
for k in answer_link_all:
answer_bookmark_all.append(total[k])