2016-07-12 65 views
-3
input:[("xyz",100),("tao",90),("quinee",100)] 

數字相等時字符串將被連接成一個列表。如何連接元組中的字符串?

output:[(["xyz","quinee"],100),(["tao"],90)] 
+0

你嘗試過什麼了嗎? –

+0

看起來您希望我們爲您編寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ]和[問]。 –

回答

1

itertools.groupby可以做到這一點。

from itertools import groupby 

def key(x): return x[1] 

input=[("xyz",100),("tao",90),("quinee",100)] 

output = [ 
    (list(string for string,index in group),index) 
    for index,group in groupby(sorted(input, key=key, reverse=True), key=key)] 

assert output == [(["xyz","quinee"],100),(["tao"],90)] 
1

您可以使用defaultdict

from collections import defaultdict 

l = [("xyz",100),("tao",90),("quinee",100)] 

d = defaultdict(list) 
for i in l: 
    d[i[1]].append(i[0]) 

r = [(j, i) for i, j in d.items()] 
print(r) 
# [(['tao'], 90), (['xyz', 'quinee'], 100)] 
1

嘗試使用defaultdict,,默認其值列表:

from collections import defaultdict 

def concat(lst): 
    d = defaultdict(list) 
    for k, v in lst: 
     d[v].append(k) 
    return [(v, k) for k, v in d.items()]