使map()返回字典
我有一个这样的函数:
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()
)
它给我的输出是这样的:
[{'customer.customer_number': 0L}, {'customer.name': 2L}, ... ]
我希望能得到一个像这样的单一字典:
{'customer.customer_number': 0L, 'customer.name': 2L, ...
有没有办法让 map
(或者其他类似的东西)只返回一个字典,而不是一堆字典的数组呢?
4 个回答
3
在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,有人可能在使用某个工具或库时,遇到了错误或者不明白的地方。这时候,大家通常会去StackOverflow这样的论坛上提问,看看有没有人遇到过类似的问题,并找到解决方案。
在这些讨论中,其他程序员会分享他们的经验,给出建议,或者提供代码示例来帮助理解。有时候,问题的解决方案可能很简单,只需要调整一些设置,或者更新到最新版本的工具。
总之,StackOverflow是一个很好的地方,可以让你向其他人请教问题,学习新知识,提升自己的编程技能。
return dict(('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position)
for h in self.heading_set.all())
11
没错。这里的基本问题是,你不能用单个的 dict
来创建一个字典,而是要用一系列长度为二的序列 (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()))
或者直接在字典构造函数里面使用生成器或者列表推导式:
dict(('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position)
for h in self.heading_set.all())
另外,在最新的版本(2.7, 3.1)中,可以直接使用字典推导式:
{'{t}.{c}'.format(t=h.table_name : c=h.column_name), h.position)
for h in self.heading_set.all()}
8
那为什么要用 map()
呢?
dict(
('{t}.{c}'.format(t=h.table_name, c=h.column_name), h.position)
for h in self.heading_set.all()
)
应该可以正常工作。