我有以下功能:
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(或类似的东西)只返回一个字典而不是一个字典数组?
为什么要用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)
应该管用.
是.基本问题是你不是用单一条目创建一个字典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)
| 归档时间: |
|
| 查看次数: |
4997 次 |
| 最近记录: |