用于构建列表列表的字典理解:在理解期间引用键的当前值

时间:2014-03-29 23:34:11

标签: python dictionary list-comprehension dictionary-comprehension

我正在尝试基于哈希创建列表列表。也就是说,我想要一个列表相同的项目列表。这可能是单线理解吗?

以下是无需理解的简单代码:

def list_of_lists(items):
    items_by_hash = defaultdict(list)
    for item in items:
        words_by_key[hash(item)].append(item)
    return words_by_key.values()

例如,假设我们有这个简单的哈希函数:

def hash(string):
    import __builtin__
    return __builtin__.hash(string) % 10

然后,

>>> l = ['sam', 'nick', 'nathan', 'mike']
>>> [hash(x) for x in l]
[4, 3, 2, 2]
>>>
>>> list_of_lists(l)
[['nathan', 'mike'], ['nick'], ['sam']] 

有什么方法可以理解吗?我需要能够引用我正在构建中间理解的字典,以便将下一个项目附加到列表值。

这是我所拥有的最好的,但它不起作用:

>>> { hash(word) : [word] for word in l }.values()
[['mike'], ['nick'], ['sam']]

它显然每次创建一个新列表,这不是我想要的。我想要像

这样的东西
{ hash(word) : __this__[hash(word)] + [word] for word in l }.values()

>>> dict([ (hash(word), word) for word in l ])
{2: 'mike', 3: 'nick', 4: 'sam'}

但这会导致同样的问题。

1 个答案:

答案 0 :(得分:1)

[[y[1] for y in x[1]] for x in itertools.groupby(sorted((hash(y), y)
  for y in items), operator.itemgetter(0))]