将列表映射到字典上

46 投票
6 回答
92755 浏览
提问于 2025-04-15 17:34

有没有办法把一个列表映射到一个字典上?我想做的是给它一个函数,这个函数会返回一个键的名字,而值就是原来的值。比如说:

somefunction(lambda a: a[0], ["hello", "world"])
=> {"h":"hello", "w":"world"}

(这不是我想做的具体例子,我想要一个像 map() 这样的通用函数,可以实现这个功能)

6 个回答

10

如果我理解你的问题没错的话,我觉得你可以通过结合使用 mapzipdict 构造函数来实现这个功能:

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'}

不过,为这个函数起个好名字比实现它要难得多。我就把这个任务留给你们自己去想吧。

撰写回答