将列表映射到字典上
有没有办法把一个列表映射到一个字典上?我想做的是给它一个函数,这个函数会返回一个键的名字,而值就是原来的值。比如说:
somefunction(lambda a: a[0], ["hello", "world"])
=> {"h":"hello", "w":"world"}
(这不是我想做的具体例子,我想要一个像 map()
这样的通用函数,可以实现这个功能)
6 个回答
10
如果我理解你的问题没错的话,我觉得你可以通过结合使用 map
、zip
和 dict
构造函数来实现这个功能:
def dictMap(f, xs) :
return dict(zip(map(f, xs), xs)
还有一个更合理的实现方式:
def dictMap(f, xs) :
return dict((f(i), i) for i in xs)
66
在Python 3中,你可以使用这种字典推导的语法:
def foo(somelist):
return {x[0]:x for x in somelist}
41
我觉得没有一个标准的函数能完全做到这一点,不过用内置的字典功能和一种叫做“推导式”的写法,我们可以很容易地自己写一个。
def somefunction(keyFunction, values):
return dict((keyFunction(v), v) for v in values)
print somefunction(lambda a: a[0], ["hello", "world"])
输出结果:
{'h': 'hello', 'w': 'world'}
不过,为这个函数起个好名字比实现它要难得多。我就把这个任务留给你们自己去想吧。