Python 从列表中生成字典按键列出的列表
我有一份清单:Python 从列表中生成字典按键列出的列表,python,Python,我有一份清单: ['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 'QS', 'TS', 'JS', 'KS'] 我需要一本这样的字典:(排序不重要) 代码: def parse_flush(cards): cards = sort_by_color(cards) flush_dic = {} print str(cards) count = 0 pos = 0 last
['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS',
'QS', 'TS', 'JS', 'KS']
我需要一本这样的字典:(排序不重要)
代码:
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技巧可以使它变短吗?您可以使用simple来获得想要的结果
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']}
您也可以使用
解释
sorted
返回已排序的项目列表,并使用keyFn
对数据进行排序
groupby
接受一个排序列表,它根据keyFn
对项目进行分组,在这种情况下keyFn
返回每个项目的第二个元素,结果如输出所示。使用一个非常简单的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']}
输出
{'S': ['AS', 'QS', 'TS', 'JS', 'KS'],
'H': ['TH'],
'C': ['8C', '2C', 'QC', '5C', '7C', '3C'],
'D': ['6D', 'TD']}
你能为我解释一下分组(排序(数据,key=keyFn),keyFn。@GrijeshChauhan请检查我在答案中添加的解释,并请让我知道它是否有意义。@thefourtheye是的,非常有帮助。明白了。知道。。谢谢!
>>> 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']}
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']}