我有一个对象列表(本例中的字符串),我想根据函数返回的某个特征对其进行分类。
例如,请考虑以下列表:
['sky', 'ocean', 'grass', 'tomato', 'leaf']
和一个函数color(item)
,它返回传递给它的字符串的颜色,例如color('sky')
返回'blue'
。我现在想要将列表转换为字典或列表列表,这些列表根据项目的颜色/函数返回的值对项目进行分组。可能的结果如下所示:
{
'blue': ['sky', 'ocean'],
'green': ['grass', 'leaf'],
'red': ['tomato']
}
我不关心密钥本身,只是相应地对项目进行分组,因此嵌套列表也可以。试着以pythonic方式做到这一点:)
答案 0 :(得分:5)
我想我会这样回答这个问题:
from collections import defaultdict
D = defaultdict(list)
a = ['sky', 'ocean', 'grass', 'tomato', 'leaf']
for item in a:
D[color(item)].append(item)
它为您提供了一个按颜色键入的列表字典,其中包含该类别的项目。
答案 1 :(得分:0)
a = ['sky', 'ocean', 'grass', 'tomato', 'leaf']
sa = {}
for x in a:
key = color(x)
if key in sa:
sa[key].append(x)
else:
sa[key] = [x]
不确定pythonic是多少,但它很清楚。在足够晚的Python版本中,您可以使用默认字典来使循环核心更清晰。
答案 2 :(得分:0)
稍微修改解决方案'展开'已提出:
a = ['sky', 'ocean', 'grass', 'tomato', 'leaf']
def color(x):
# dummy hash function for demo
return len(x)
color_map = {}
for x in a:
key = color(x)
color_map.setdefault(key,[]).append(x)
print color_map
a = ['sky', 'ocean', 'grass', 'tomato', 'leaf']
def color(x):
# dummy hash function for demo
return len(x)
color_map = {}
for x in a:
key = color(x)
color_map.setdefault(key,[]).append(x)
print color_map
上面的代码示例打印:
{3: ['sky'], 4: ['leaf'], 5: ['ocean', 'grass'], 6: ['tomato']}