将列表映射到字典

Jef*_*rth 25 python functional-programming hashtable list

有没有办法将列表映射到字典?我想要做的是给它一个函数,它将返回一个键的名称,该值将是原始值.例如;

somefunction(lambda a: a[0], ["hello", "world"])
=> {"h":"hello", "w":"world"}
Run Code Online (Sandbox Code Playgroud)

(这不是我想要做的具体示例,我想要像map()这样的通用函数可以做到这一点)

Hte*_*hno 37

在Python 3中,您可以使用此词典理解语法:

def foo(somelist):
    return {x[0]:x for x in somelist}
Run Code Online (Sandbox Code Playgroud)

  • python 2.7中也提供了这种语法 (4认同)

Mar*_*ers 27

我不认为存在一个标准函数就是这样,但是使用dict builtin和一个理解来构造一个很容易:

def somefunction(keyFunction, values):
    return dict((keyFunction(v), v) for v in values)

print somefunction(lambda a: a[0], ["hello", "world"])
Run Code Online (Sandbox Code Playgroud)

输出:

{'h': 'hello', 'w': 'world'}
Run Code Online (Sandbox Code Playgroud)

但是为这个功能提出一个好名字比实现它更困难.我将把它作为读者的练习.

  • 我很好,但我很惊讶你会为这么小的贡献给予明确的信任. (3认同)
  • 我在BSD样式许可下的开放源代码程序中使用它。我给了你信用,只是想确保你同意吗? (2认同)

Pul*_*sal 8

从其他答案中获取提示,我使用地图操作实现了这一点。我不确定这是否完全回答了您的问题。

mylist = ["hello", "world"]
def convert_to_dict( somelist ):
    return dict( map( lambda x: (x[0], x), somelist ) )

final_ans = convert_to_dict( mylist ) 
print final_ans
Run Code Online (Sandbox Code Playgroud)


syk*_*ora 5

如果我没有理解你的问题,我相信你可以组合实现这一点map,zipdict构造函数:

def dictMap(f, xs) :
    return dict(zip(map(f, xs), xs)
Run Code Online (Sandbox Code Playgroud)

一个更健全的实现:

def dictMap(f, xs) :
    return dict((f(i), i) for i in xs)
Run Code Online (Sandbox Code Playgroud)

  • 对于 2018 年,Python 3:`{f(i): i for i in x}` (2认同)