2014-01-10 30 views
2

詞典列表我有一個列表:從列表中進行的關鍵

['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 
'QS', 'TS', 'JS', 'KS'] 

我需要一個字典是這樣的:(排序並不重要)

{'C': ['QC', '8C', '7C', '5C', '3C', '2C'], 
'S': ['AS', 'KS', 'QS', 'JS', 'TS'] 
} 

代碼:

def parse_flush(cards): 
    cards = sort_by_color(cards) 
    flush_dic = {} 
    print str(cards) 
    count = 0 
    pos = 0 
    last_index = 0 
    for color in colors: 
     for i, card in enumerate(cards): 
      if card[1] == color: 
       count += 1 
       last_index = i+1 
       if count == 1: 
        pos = i 
     if count >= 5: 
      flush_dic[color] = sort_high_to_low(cards[pos:last_index]) 
     count = 0 
    return flush_dic 

我的代碼現在看起來,它的工作原理,但我不喜歡它的長度,就可以使用Python的技巧把它縮短?

回答

2

使用一個非常簡單的for循環:

>>> l = ['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 
... 'QS', 'TS', 'JS', 'KS'] 
>>> my_dict = {} 
>>> for x in l: 
...  my_dict.setdefault(x[-1],[]).append(x) 
... 
>>> my_dict 
{'S': ['AS', 'QS', 'TS', 'JS', 'KS'], 'H': ['TH'], 'C': ['8C', '2C', 'QC', '5C', '7C', '3C'], 'D': ['6D', 'TD']} 
5

您可以使用簡單的collections.defaultdict得到你想要的結果

from collections import defaultdict 
result = defaultdict(list) 
for item in data: 
    result[item[1]].append(item) 
print result 

輸出

{'S': ['AS', 'QS', 'TS', 'JS', 'KS'], 
'H': ['TH'], 
'C': ['8C', '2C', 'QC', '5C', '7C', '3C'], 
'D': ['6D', 'TD']} 

可以解決這個問題,使用itertools.groupby以及

data = ['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 'QS', 
     'TS', 'JS', 'KS'] 

from itertools import groupby 
from operator import itemgetter 
keyFn = itemgetter(1) 
print {k:list(grp) for k, grp in groupby(sorted(data, key = keyFn), keyFn)} 

EXPL anation

sorted返回一個排序的項目列表,它使用keyFn排序數據。

groupby接受一個排序的列表和它組基於所述keyFn的項目,在此情況下keyFn返回每個第二元件和每一個項目和結果作爲在輸出端看到。

+0

你能解釋一下'GROUPBY(排序(數據,鍵= keyFn),keyFn'我 –

+0

謝謝。你的,這是作品 – Lucian

+1

@GrijeshChauhan請檢查我在答案中添加的解釋,並請讓我知道它是否合理。 – thefourtheye

2
data = ['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 'QS', 
     'TS', 'JS', 'KS'] 

dic = {} 
for i in data: 
    try: 
     dic[i[1]].append(i) 
    except: 
     dic[i[1]] = [] 
     dic[i[1]].append(i) 

print dic 

輸出

{'S': ['AS', 'QS', 'TS', 'JS', 'KS'], 
'H': ['TH'], 
'C': ['8C', '2C', 'QC', '5C', '7C', '3C'], 
'D': ['6D', 'TD']} 
相關問題