make map()返回一个字典

Jas*_*ett 10 python

我有以下功能:

def heading_positions(self):
    return map(
            lambda h:
                {'{t}.{c}'.format(t=h.table_name,c=h.column_name) : h.position },
                self.heading_set.all()
            )
Run Code Online (Sandbox Code Playgroud)

它给我这样的输出:

[{'customer.customer_number': 0L}, {'customer.name': 2L}, ... ]
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样一个字典:

{'customer.customer_number': 0L, 'customer.name': 2L, ...
Run Code Online (Sandbox Code Playgroud)

有没有办法让map(或类似的东西)只返回一个字典而不是一个字典数组?

Tim*_*ker 7

为什么要用map()呢?

dict(
    ('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position)
    for h in self.heading_set.all()
    )
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 或者`{'{t}.{c}'.format(...):h.position for self inheading_set.all()}`in more recent versions(带有dict comprehensions的那些). (3认同)

And*_*ffe 7

是.基本问题是你不是用单一条目创建一个字典dict,而是从一个长度为2的序列中创建一个字典(key, value).

因此,不是dict使用该函数创建一个独立的单项,而是创建一个元组,然后您可以使用dict()构造函数:

dict(map(lambda h: ('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position), 
         self.heading_set.all()))
Run Code Online (Sandbox Code Playgroud)

或者直接在dict构造函数中使用生成器或列表推导:

dict(('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position) 
     for h in self.heading_set.all())
Run Code Online (Sandbox Code Playgroud)

或者,在最新版本(2.7,3.1)上直接进行字典理解:

{'{t}.{c}'.format(t=h.table_name : c=h.column_name), h.position) 
     for h in self.heading_set.all()}
Run Code Online (Sandbox Code Playgroud)