假设我们有一个字典和指定的函数,它接受两个参数作为输入
foo = {'key1':'value1', 'key2':'value2'}
def bar(key, value):
print key, value
是否可以为一行中的每个键值对调用此函数?
我知道我可以在列表/字典理解中做到这一点,但我认为这个解决方案不是 pythonic,因为我不会在bar函数中返回任何内容。有没有推荐的和pythonic的方法可以做到这一点?
在字典的.items
方法上使用for-loop
:
for item in foo.items():
bar(*item)
*
语法解压缩元组(例如('key1', 'value1')
( 到函数的参数中。请注意,您也可以在 for 循环中进行解包:
for k, v in foo.items():
bar(k, v)
两者都提供:
key2 value2
key1 value1
您可能会注意到,它们的顺序与您定义它们的顺序不同。这只是字典的一个隐含特征——它们没有(可靠的(顺序。我说"可靠"的原因是因为它是确定性的(基于每个对象的哈希值,但依赖它是不明智的。
是的,你可以对你的函数进行微小的修改
foo = {'key1':'value1', 'key2':'value2'}
def bar(pair):
key, value = pair
print key, value
有了这个功能,你可以使用map
.
map(bar, foo.items())
产生:
key2 value2
key1 value1
引用PEP-20
简单总比复杂好。
阅读 Python 的禅意
为了简单起见,你可以做一些事情——
def bar(key, value):
print key, value
for k, v in foo.items():
bar(k, v)
foo = {'key1':'value1', 'key2':'value2'}
def bar(key, value):
print key, value
[bar(key, value) for key,value in foo.items()]